所以我有以下HTML:
<div myID='carousel'>
<div>
<div>
<h3>First Text</h3>
</div>
</div>
</div>
<div myID='carousel'>
<div>
<div>
<h3>Second Text</h3>
</div>
</div>
</div>
我试图获得第二个轮播 - 即Second Text
我可以使用h3
$x('//div[./h3[contains(text(),"Second Text")]]')
段
但是,我希望父级div与myID
- 任何想法?
答案 0 :(得分:1)
鉴于此XML,
<html>
<div myID='carousel'>
<div>
<div>
<h3>First Text</h3>
</div>
</div>
</div>
<div myID='carousel'>
<div>
<div>
<h3>Second Text</h3>
</div>
</div>
</div>
</html>
然后:
这个XPath,
//div[.//h3 = "Second Text"]
选择包含字符串值为div
的后代h3
元素的所有"Second Text"
元素。
这个XPath,
//div[div/div/h3 = "Second Text" and @myID="carousel"]
选择包含字符串值为div
的后代h3
元素的所有"Second Text"
元素,前提是div
元素的myID
属性值等于"carousel"
。
这个XPath,
//div[div/div/h3 = "Second Text" and @myID]
选择包含字符串值为div
的后代h3
元素的所有"Second Text"
元素,前提是div
元素也具有myID
属性,无论它的价值。
以下是令人困惑的部分:XPath #2 和#3 在Chrome中选择 通过$x()
。 (WTH?)
原因是in Chrome, XPath requires lowercasing to query attributes,可能是由XHTML's requirement that element and attribute names must be in lower case推动的。
Chrome解决方法:测试@myid
而不是@myID
。