<ul id="statsArrayRow">
<li></li>
<li>19</li>
<li>44</li>
<li>48</li>
<li>35</li>
</ul>
在上面的列表中,第一个元素没有文本内容。我想基于非空索引获取元素。 第一个非空元素是19,第二个是44,依此类推。
以下xpath通过索引2返回19,但我想通过索引2得到44
//ul[@id='statsArrayRow']/li[2])
我试过
//ul[@id='statsArrayRow' and string-length(text()) > 0]/li[2])
它也返回19而不是44。
我们如何忽略索引的非空元素?
答案 0 :(得分:1)
Xpath获取第二个非空li元素:
(//ul[@id='statsArrayRow']/li[string-length(text()) > 0])[2]
它是如何构建的:
//ul[@id='statsArrayRow']/li
搜索ul父元素li
//ul[@id='statsArrayRow']/li[string-length(text()) > 0]
获取带有文字的li
元素(//ul[@id='statsArrayRow']/li[string-length(text()) > 0])[2]
获取第2条,文字添加()[2]
部分对于那些使用webdriver + java的人:
在java中,您可以获取所有元素,只过滤掉空元素driver.findElements(By.id("statsArrayRow"))
.stream()
.filter(e->!e.getText().equals(""))
.collect(Collectors.toList())
.get(1);