找不到具有相同类名的正确元素

时间:2015-05-12 10:04:20

标签: html xpath

我有以下HTML代码段:

<div id="result-1">
  <div class="page">
    <div class="collapsingblock">
      <h4>Click Me</h4>
    </div>
    <div class="collapsingblock collapsed">
      <h4>No, Click Me</h4>
    </div>
  </div>
</div>

我正在尝试做的是找到第二个collapsingblock并且它是h4

我有以下内容:

(//div[@id="result-1"]/div[@class="page"]/div[@class="collapsingblock"])[2]/h4

我的xPath不返回该元素。如果我用[1]替换它,它会找到collapsingblock的第一个实例

有什么想法吗?

由于

更新:

我刚才注意到,HTML正在使用JavaScript向第二个collapsingblock添加/删除其他类,collapsed

2 个答案:

答案 0 :(得分:1)

问题是第二个内部class元素的div属性的值等于&#34; collapsingblock&#34;,因为你可以见:

<div class="collapsingblock collapsed">
  <h4>No, Click Me</h4>
</div>

即使class在HTML中具有非常明确的语义,但它并不意味着XPath有任何特殊之处,它与其他任何属性一样。

使用contains()来避免此问题:

(//div[@id="result-1"]/div[@class="page"]/div[contains(@class,"collapsingblock")])[2]/h4

然后,上面表达式的唯一结果是

<h4>No, Click Me</h4>

顺便说一下,在这种情况下,表达式左手部分的括号是

//div[@id="result-1"]/div[@class="page"]/div[contains(@class,"collapsingblock")][2]/h4
在给定此特定输入文档的情况下,

将完全相同。

答案 1 :(得分:0)

由于优先权,括号是必要的:

(//div[@id="result-1"]/div[@class="page"]/div[@class="collapsingblock"])[2]/h4