如何加载XmlNode对象忽略未声明的命名空间?

Joh*_*n K 12 .net c# xml xmlnode

我想在存在无法识别的命名空间时加载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>
Run Code Online (Sandbox Code Playgroud)

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

'st1'是未声明的命名空间.第3行,第251位.

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

dah*_*byk 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;
}
Run Code Online (Sandbox Code Playgroud)