【问题标题】:How to load an XmlNode object ignoring undeclared namespaces?如何加载忽略未声明的命名空间的 XmlNode 对象?
【发布时间】:2011-05-01 16:01: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 实例?

【问题讨论】:

    标签: c# .net xml xmlnode


    【解决方案1】:

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

    【讨论】:

    • 谢谢。这满足了需求,而且非常简单。
    猜你喜欢
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2011-12-05
    • 2015-02-18
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多