“所有节点恰好位于基节点下面的一个节点的正确XPath是什么?”

时间:2009-03-27 19:41:42

标签: c# xml xpath

假设我不知道我的基节点或其子节点的名称,“所有节点恰好在基节点下面的一个节点的XPath语法是什么?”

如果模式是XmlNode,我有以下代码:

XmlNodeList kvpsList = pattern.SelectNodes(@"//");

对我而言,但我得到以下例外:

   System.Xml.XPath.XPathException: Expression must evaluate to a node-set.

正确的语法是什么?

2 个答案:

答案 0 :(得分:8)

您正在寻找的路径是

/*/*

//不是一个有意义的XPath表达式,因为它是一个运算符。如果您编写类似//element的内容,它将匹配XML文档中任何名为element的元素,无论它在层次结构中有多深。

/*/*说“匹配层次结构中具有两个深度级别的每个节点”。

答案 1 :(得分:7)

目前的两个答案是错误的:

/*/*

不会选择所有属于顶级节点子节点的节点。它不会选择任何文本节点,处理指令或注释作为顶级元素的子元素。

一个XPath表达式,用于选择顶部元素的所有子节点:

<强> /*/node()

//不是语法正确的XPath表达式;根据{{​​3}}:

  

//简称   /后代或自身::节点()/

请注意扩展缩写最后一个未完成位置步骤的开头。如果没有添加任何内容,则包含缩写的整个XPath表达式已完成,因此在语法上不正确。

另一个注意事项是指定选择顶级元素子节点的所有节点时不需要//缩写。如果要从顶部元素中选择XML文档中下降的所有节点,则选择这些节点的一个XPath表达式为:

<强> /*//node()