如何选择具有不同XML命名空间的XML节点?

时间:2016-10-04 08:54:27

标签: asp.net xml xml-parsing

我有一个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应用程序,我试图检查文档中是否存在节点<RenDtSrc>。以下是我用来读取XML文件和节点元素的代码

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

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("//stReq/EvalRes/node()/*");

输出:

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