加载不那么良好的XML为
问题描述:
我有处理数据的问题,这几乎是很好的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
可能会或可能不会进行字符串操作稍微复杂一点
答
我不知道是否有一个XmlReader设置,将忽略此问题,但你总是可以使用标准的字符串操作去除额外的文档类型。