从匹配列表中选择最后一个节点

时间:2010-07-12 12:20:54

标签: html xhtml xpath

我正试图找出一种方法,使用last()函数找到与给定xpath匹配的最后一个节点。问题是路径的最后一个元素也有一个约束。

"//div[@id='someId']/ul/li/div[@class='class1 class2 ']/span[@class='someType2 ']"

如果我使用

"//div[@id='someId']/ul/li/div[@class='class1 class2 ']/span[@class='someType2 ']' and last()]"

它仍匹配多个节点。也许其中一个原因是路径中的最后一个div标签包含2个span元素。请帮我选择与上述路径匹配的最后一个节点。

谢谢和问候,
Vamyip

3 个答案:

答案 0 :(得分:1)

如果您的xml是xhtml,为什么不使用CSS选择器? 如果我没弄错的话,选择器应该是

#someId > ul > li > div.class1.class2 > span.someType2

#someId > ul > li > div.class1.class2 > span.someType2:last

我也在html页面上使用xpath,但是当CSS选择器变得普及时,我发现它们在浏览器中比xpath更受支持。

答案 1 :(得分:1)

使用

(//div[@id='someId']/ul/li/div[@class='class1 class2 ']
                                  /span[@class='someType2 '])
                                          [last()]

请注意:表达式周围的括号以//开头。这是一个FAQ。 []绑定强于//,这就是为什么必须使用括号来表示不同的优先级。

答案 2 :(得分:0)

在selenium中,您还可以使用javascript来检索元素。这样的事情怎么样?

dom=var list1 = 
    document.getElementById('someId').
    getElementsByTagName('li');
var finallist = new Array();
for (var i=0; i<list1.length; i++) {
  var list2 = list1[i].getElementsByClassName("class1 class2");
  for (var j=0; j<list2.length; j++) {
    var list3 = list2[j].getElementsByClassName("someType2");
    for (var k=0; k<list3.length; k++) {
      finallist.push(list3[k];
    }
  }
}
finallist.pop()

http://seleniumhq.org/docs/04_selenese_commands.html#locating-by-dom