最初に複数の DTD 宣言があることを除いて、ほぼ整形式の XHTML ドキュメントであるデータの処理に問題があります。
<!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>
最初のDTDのみを使用し、残りの宣言を無視して、このデータを XDocument オブジェクトにロードする必要があります。â
ドキュメントにはなどの特殊な文字が含まれている可能性があるため、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
文字列操作を少し複雑にする場合としない場合があります。