XML从C#查询特定节点

时间:2009-09-17 21:52:49

标签: c# xml

我编写了一大块XML解析,如果我使用绝对路径,它就能成功运行。

我现在需要将XMLNode作为参数并针对此运行xpath。

有谁知道怎么做?

我尝试使用相对XPath查询但没有成功!!

应该这么难吗?

1 个答案:

答案 0 :(得分:2)

查看XPath表达式的示例会有所帮助,这些表达式无法正常工作。以下是一些可能的原因(我经常犯的错误)。

假设XML文档如:

<A>
  <B>
    <C d='e'/>
  </B>
  <C/>
  <D xmlns="http://foo"/>
</A>
  • 忘记删除代表文档的顶级斜杠('/'):

    document.XPathSelectElements("/A") //选择一个A节点

    document.XPathSelectElements("//B") //选择一个B节点

    document.XPathSelectElements("//C") //选择两个C节点

但是

aNode.XPathSelectElements("/B") // selects nothing (this looks for a rootNode with name B)
aNode.XPathSelectElements("B") // selects a B node

bNode.XPathSelectElements("//C") // selects TWO C nodes - all descendants of the root node
bNode.select(".//C") // selects one C node - all descendants of B
  • 忘记名称空间。

    aNode.XPathSelectElements("D") //不选择任何内容(D与A不同的名称空间) aNode.XPathSelectElements("[local-name()='D' and namespace-uri()='http://foo']") //一个D节点

(当根节点带有无前缀的命名空间时,这通常是一个问题 - 很容易错过)