假设我不知道我的基节点或其子节点的名称,“所有节点恰好在基节点下面的一个节点的XPath语法是什么?”
如果模式是XmlNode,我有以下代码:
XmlNodeList kvpsList = pattern.SelectNodes(@"//");
对我而言,但我得到以下例外:
System.Xml.XPath.XPathException: Expression must evaluate to a node-set.
正确的语法是什么?
答案 0 :(得分:8)
您正在寻找的路径是
/*/*
//
不是一个有意义的XPath表达式,因为它是一个运算符。如果您编写类似//element
的内容,它将匹配XML文档中任何名为element
的元素,无论它在层次结构中有多深。
/*/*
说“匹配层次结构中具有两个深度级别的每个节点”。
答案 1 :(得分:7)
目前的两个答案是错误的:
/*/*
不会选择所有属于顶级节点子节点的节点。它不会选择任何文本节点,处理指令或注释作为顶级元素的子元素。
一个XPath表达式,用于选择顶部元素的所有子节点:
<强> /*/node()
强>
//
不是语法正确的XPath表达式;根据{{3}}:
//简称 /后代或自身::节点()/
请注意扩展缩写最后一个未完成位置步骤的开头。如果没有添加任何内容,则包含缩写的整个XPath表达式已完成,因此在语法上不正确。
另一个注意事项是指定选择顶级元素子节点的所有节点时不需要//
缩写。如果要从顶部元素中选择XML文档中下降的所有节点,则选择这些节点的一个XPath表达式为:
<强> /*//node()
强>