Я получил обработку данных проблемы, которая почти хорошо сформированную XHTML документа кроме этого есть несколько объявлений DTD в начале:загрузки не так хорошо сформированный XML в XDocument (множественный DTD)
<!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
, которые могут или не могут сделать манипуляции со строками немного более сложный