代码之家  ›  专栏  ›  技术社区  ›  John K

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

  •  12
  • John K  · 技术社区  · 14 年前

    我想装一个 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实例?

    1 回复  |  直到 11 年前
        1
  •  30
  •   dahlbyk    14 年前

    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;
    }