代码之家  ›  专栏  ›  技术社区  ›  Yes - that Jake.

“所有节点都在基本节点正下方一个”的正确XPath是什么

  •  5
  • Yes - that Jake.  · 技术社区  · 17 年前

    假设我不知道基本节点或其子节点的名称,那么“所有节点正好位于基本节点下一个”的XPath语法是什么

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

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

    这对我来说是正确的,但我得到以下例外:

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

    正确的语法是什么?

    2 回复  |  直到 17 年前
        1
  •  8
  •   Welbog    17 年前

    你要找的路是

    /*/*
    

    // 不是有意义的XPath表达式,因为它是一个运算符。如果你写了这样的东西 //element element XML文档中的任何位置,无论层次结构有多深。

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

        2
  •  7
  •   Dimitre Novatchev    17 年前

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

    /*/*
    

    . 它不选择任何文本节点、处理指令或注释,这些都是top元素的子元素。

    /*/node()

    // 不是语法正确的XPath表达式;根据 XPath Spec :

    //是的缩写 /后代或self::node()/

    注意 未完成的定位步骤的开始,位于扩展缩写的末尾。如果没有添加任何内容,则包含缩写的整个XPath表达式将完成,因此语法不正确。

    另一个音符 那是我的名字吗 // 在指定作为顶层元素子元素的所有节点的选择时,不需要缩写。如果要选择该XML文档中的所有节点 下来 从顶部元素中,选择这些元素的一个XPath表达式是:

    /*//node()