【问题标题】:How to select XML node with different XML namespace?如何选择具有不同 XML 命名空间的 XML 节点?
【发布时间】:2016-10-04 08:54:27
【问题描述】:

我有一个 XML 文档,它看起来像:

<stReq xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <EvalRes>
    <RenDtSrc xmlns="http://fakeurl.com/somthing/facade/params">
          <ContentType>application/pdf</ContentType>
          <DocumentName>Name</DocumentName>
          <Content>Doc Content</Content>
    </RenDtSrc>
  </EvalRes>
</stReq>

从一个 asp.net 应用程序,我试图检查一个节点 &lt;RenDtSrc&gt; 是否存在于文档中。以下是我用来读取 XML 文件和节点元素的代码

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("D:\\Test\\Doc1.xml");
XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("/stReq/EvalRes/RenDtSrc");

nodeList 的计数返回零,即使其中有子节点。 我认为它与命名空间管理器有关,但我无法弄清楚。任何帮助将不胜感激。

【问题讨论】:

    标签: asp.net xml xml-parsing


    【解决方案1】:
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load("D:\\Test\\Doc1.xml");
    var nsm = new XmlNamespaceManager(xmlDoc.NameTable);
    nsm.AddNamespace("s", "http://fakeurl.com/somthing/facade/params");
    XmlNodeList nodeList = xmlDoc.SelectNodes("//s:RenDtSrc", nsm);
    

    【讨论】:

    • 请不要发布原始代码,并解释一下为什么会这样。
    【解决方案2】:
    XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("//stReq/EvalRes/node()/*");
    

    输出:

    Node [0] = {Element, Name="ContentType"}
    Node [1] = {Element, Name="DocumentName"}
    Node [2] = {Element, Name="Content"}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 2020-05-13
      • 2018-05-30
      相关资源
      最近更新 更多