使用XPath选择唯一的节点集?

时间:2014-03-10 13:17:18

标签: ruby-on-rails ruby xpath

我想选择一组元素作为节点(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] - 这不会选择第一次出现。

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

2 个答案:

答案 0 :(得分:0)

如果您想要第一个匹配的,请执行:

(//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>

答案 1 :(得分:0)

看看“XPath Get first element of subset”。

基本上,predicates have higher precedence///运营商都要好。

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

另请查看the spec以获取更多背景信息。