我正在尝试使用Xpath查找具有给定CSS类(.product)的所有<div>
。Xpath Expression根据子节点的存在选择节点?
<div class="product">
<a href="#product/1966740"><img class="cover_image" src="https://foobar.JPG" alt="foobar" title="foobar">
<h3>foobar</h3></a>
<div class="price">$66.00</div>
<div class="rrp">$219.11</div>
</div>
所以XPath来寻找那些相对简单:
//div[@class="product"]
不过,我只是想找到未售完的产品。售完的产品是这样的:
<div class="product">
<img class="availability" src="https://sold_out_tag.png" alt="sold out">
<a href="#product/1963553"><img class="cover_image" src="foobar.jpg" alt="foobar" title="foobar">
<h3>FooBar<h3></a>
<div class="price">$40.00</div>
<div class="rrp">$129.33</div>
</div>
我想我可以用不(),并检查不以设置为“售罄” alt属性包含<img>
<div>
秒。
但是,下面是无效:
//div[@class="product" and not([img[@alt="sold out"]])]
如何得到这个工作有什么想法?
干杯, 维克多
很酷,这个很有效! =)问题 - 你说我不需要[] - XPath如何知道我要求它检查是否存在子节点?其次,@class与空格的连接是什么?最后 - 你会推荐给XPath的任何优秀指南? – victorhooi
(1)'not()'在执行评估之前将其内容转换为布尔值。如果这些内容是节点集表达式,则布尔值如果节点集为空则为“假”,如果非空则为“真”。 (2)空格防止由于类名的部分匹配而导致的误报。例如,'contains('not-a-product','product')'将评估为'true',而'concains'('not-a-product','product')'评估为false,如预期的。 (3)我可以给出的最好建议是阅读[XPath规范](http://www.w3.org/TR/xpath/)以及练习,练习和练习。 – JLRishe