假设我不知道我的基节点或其子节点的名称,"所有节点恰好在基节点下面的一个节点的XPath语法是什么?"
使用pattern作为XmlNode,我有以下代码:
XmlNodeList kvpsList = pattern.SelectNodes(@"//");
哪个看起来对我来说,但我得到以下例外:
System.Xml.XPath.XPathException: Expression must evaluate to a node-set.
什么是正确的语法?
你正在寻找的路径是
/*/*
//
不是一个有意义的XPath表达式,因为它是一个运算符.如果你写了类似的东西//element
,它将匹配element
XML文档中任何位置命名的每个元素,无论它在层次结构中有多深.
/*/*
正在说"匹配层次结构中具有两个深度级别的每个节点".
目前的两个答案是错误的:
/*/*
不会选择作为顶级节点的子节点的所有节点.它不会选择任何文本节点,处理指令或注释作为顶部元素的子元素.
一个XPath表达式,用于选择top元素的arte子节点的所有节点:
/*/node()
//
不是语法上正确的XPath表达式; 根据XPath规范:
//是/ descendant-or-self :: node()/的缩写
请注意扩展缩写末尾的未完成位置步骤的开头.如果没有添加任何内容,则包含缩写的整个XPath表达式已完成,因此在语法上不正确.
另一个注意事项是,//
在指定作为顶部元素的子节点的所有节点的选择时,缩写不是必需的.如果要选择XML文档中从顶部元素下降的所有节点,则选择这些节点的一个XPath表达式为:
/*//node()