13

当存在无法识别的命名空间时, 我想加载XmlNode而不会收到XmlException 。

原因是因为我需要将 XMLNode 实例传递给方法。我正在加载具有原始上下文之外的名称空间的任意 XML 片段(例如,MSWord 格式和其他具有各种模式的软件产品,这些模式用它们的名称空间前缀“污染”了内容)。命名空间对我或传递给它的目标方法并不重要。(这是因为目标方法将其用作 HTML 进行渲染,并且名称空间将被自然忽略或抑制。)

示例
这是一个示例片段,我试图从中制作 XMLNode:

 <p>
 <div>
     <st1:country-region w:st="on">
     <st1:place w:st="on">Canada</st1:place>
     </st1:country-region>
     <hr />
     <img src="xxy.jpg" />
 </div>
 </p>

当我尝试将其加载到XmlDocument实例中时(这是我尝试获取 XmlNode),我得到以下 XML 异常:

'st1' 是一个未声明的命名空间。第 3 行,位置 251。

如何从那种 XML 片段中获取 XmlNode 实例?

4

1 回答 1

31

XmlTextReader有一个Namespaces可以关闭的属性:

XmlDocument GetXmlDocumentFromString(string xml) {
    var doc = new XmlDocument();

    using (var sr = new StringReader(xml))
    using (var xtr = new XmlTextReader(sr) { Namespaces = false })
        doc.Load(xtr);

    return doc;
}
于 2010-10-28T04:10:24.380 回答