代码之家  ›  专栏  ›  技术社区  ›  Shubham

为什么下面的XPath语句返回所有“a”元素?

  •  3
  • Shubham  · 技术社区  · 16 年前
    print $tree->findvalue('//a[1]');
    

    我正在使用 HTML::TreeBuilder::XPath 在perl中。现在我希望上面的语句返回第二个“a”元素的值,但是它返回页面中所有“a”元素的值。我不明白为什么?

    2 回复  |  直到 16 年前
        1
  •  8
  •   THX-1138    16 年前

    你所拥有的将返回每个元素的第一个孩子。
    //a[1] 工作如下(结果为2个节点):

    X
     Y
      a <-- give you this
      a
    Z
     a <-- and this
     a
    

    尝试 (//a)[1] 相反

        2
  •  3
  •   Mads Hansen    16 年前

    XPATH表达式查找所有 a 一

    因此,根据XML的结构,您可能无法获得 每一个 一 元素(如果有多个 如果是兄弟姐妹,你只能得到第一个兄弟姐妹)。

    一 在文档中,可以使用以下表达式: (//a)[1]

    //a 括号中创建一个集合,然后应用谓词过滤器,选择集合中的第一个,而不是第一个 在每个步骤中遇到 // .