提问人:Gart 提问时间:4/22/2010 最后编辑:Gart 更新时间:5/5/2010 访问量:1178
将格式不太好的 XML 加载到 XDocument(多个 DTD)中
Loading not-so-well-formed XML into XDocument (multiple DTD)
问:
我在处理数据时遇到了一个问题,它几乎是格式正确的XHTML文档,除了它在开头有多个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>
我需要仅使用第一个 DTD 将此数据加载到 XDocument 对象中,而忽略其余声明。不可能完全忽略 DTD 处理,因为文档可能具有异常字符,如 or 等。â
€
文本是从外部来源检索的,我不知道为什么会这样。
显然,我天真地尝试加载此文档失败了: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
答:
1赞
David
4/22/2010
#1
我不确定是否有 XmlReader 设置会忽略这个问题,但您始终可以使用标准字符串操作来删除额外的文档类型。
评论