【问题标题】:Reading nodes with&without namespace tag读取带&不带命名空间标签的节点
【发布时间】:2013-05-22 00:26:11
【问题描述】:

我需要像这样阅读 xml 文档:

<wcs:CoverageOffering>
<wcs:description>Generated from GeoTIFF</wcs:description>
<wcs:name>ndh:ndh-cyclone-mortality-risks-distribution</wcs:name>
                            ....

但在某些服务器中,xml 文档是在没有命名空间标签的情况下实现的:

<CoverageOffering>
<description>Generated from GeoTIFF</description>
<name>ndh:ndh-cyclone-mortality-risks-distribution</name>
                         ....

我怎样才能有效地阅读两者? (我为每个节点写了 if else 语句来控制这个条件,但这似乎不是一个好方法)

【问题讨论】:

    标签: c# .net xml namespaces


    【解决方案1】:

    您可以使用this XML Library。如果需要,它将使用命名空间。

    你可以像这样使用它:

    XElement root = XElement.Load(file);
    string description = root.Get("path/to/description", default(string));
    

    string description = root.XGetElement("//description", default(string));
    

    default(string) 用于 Get 的类型转换。你可以传递任何你想要的默认值。

    【讨论】:

      【解决方案2】:

      使用XmlDocument并将wcs命名空间添加到XmlNamespaceManager

      var document = new XmlDocument();
      document.Load(...);
      var nsmgr = new XmlNamespaceManager(document.NameTable);
      nsmgr.AddNamespace("wcs", "http://...your ns");
      
      var nl = document.SelectNodes("your xpath", nsmgr);
      

      【讨论】:

      • 使用 xmlnamespacemanager 类让代码更好 谢谢^^
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多