【问题标题】:Select unique set of nodes with XPath?使用 XPath 选择唯一的节点集?
【发布时间】:2014-03-11 01:28:08
【问题描述】:

我要选择一组元素作为节点(div[@class="Adres"]的内容):

<div class="KolumnaStyl">
  <div class="Nazwa">ABCD</div>
    <div class="Adres">
      12-345 Warszawa
      <br/>
      ul. Krasnobrodzka 5
      <br/>
      Mazowieckie 

这可以通过:

//div[@class="KolumnaStyl"]/div[@class="Adres"]/node()

碰巧,页面上有两个相同的div[@class="Adres"],这意味着node()当前选择了两者的内容。但是,我不能调用 //div[@class="KolumnaStyl"][1] - 这不会选择第一次出现。

如果父目录存在多次,我如何选择一组唯一的节点?

【问题讨论】:

  • unique 表示第一个还是什么?
  • 数组不是从零开始的吗?如果您想要第一次出现,您不会使用零吗? //div[@class="KolumnaStyl"][0] ?
  • 表示第一次出现 //div[@class="KolumnaStyl"]//div[@class="Adres"]
  • @user3334690:在 XPath 中,position() 从 1 开始。
  • @choroba 我认为可能是这种情况

标签: ruby-on-rails ruby xpath


【解决方案1】:

看看“XPath Get first element of subset”。

基本上,predicates have higher precedence/// 运算符。

所以,(//div[@class="KolumnaStyl"]//(div[@class="Adres"]))[1] 应该会返回您想要的结果。

还可以查看the spec 了解更多背景信息。

【讨论】:

    【解决方案2】:

    如果你想要第一个匹配的,那么做:

    (//div[@class="KolumnaStyl"]//div[@class="Adres"])[1]/node()
    

    XPATH中,第一个表示1,而不是0

    这是一个示例 HTML:

    <body>
        <div class="foo">
            <p> 12 </p>
        </div>
        <div class="foo">
            <p> 112 </p>
        </div>
    </body>
    

    XPATH 表达式:

    (//div[@class = 'foo'])[1]
    

    输出

    <div class="foo">
      <p>12</p>
    </div>
    

    【讨论】:

    • 您提供的 Xpath 无效?
    • @Severin 你为什么这么认为?
    • 我得到“无效的 Xpath”。只要我在 div 周围加上括号,它就会刹车。
    • @Severin:左括号应该放在开头。
    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 2014-04-08
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2013-04-25
    相关资源
    最近更新 更多