0
我有處理數據的問題,這幾乎是很好的XHTML文檔,除了它在開始的時候多DTD聲明的XDocument(多DTD):加載不那麼良好的XML爲
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
...
</head>
<body>
...
</body>
</html>
我需要將這個數據加載到XDocument對象中,只使用第一個 DTD和忽略其餘的聲明。不可能完全忽略DTD處理,因爲文檔可能有不尋常的字符,如â
或€
等。
文本是從外部來源檢索的,我不知道它爲什麼會出現這種情況。
顯然,我的天真嘗試加載該文件失敗,System.Xml.XmlException : Cannot have multiple DTDs
:
var xmlReaderSettings = new XmlReaderSettings
{
DtdProcessing = DtdProcessing.Parse,
XmlResolver = new XmlPreloadedResolver(),
ConformanceLevel = ConformanceLevel.Document,
};
using (var xmlReader = XmlReader.Create(stream, xmlReaderSettings))
{
return XDocument.Load(xmlReader);
}
什麼是處理這種數據的最佳方式是什麼?
PS:我忘了提,該數據來自Stream
可能會或可能不會進行字符串操作稍微複雜一點