我正在使用PHP的DOMDocument的xPath函数。
让我们说,我有下面的HTML(以说明我的问题):
<span class="price">$5.000,00</span>
<span class="newPrice">$4.000,00</span>
第一行始终可用,但在某些情况下,&#39; newPrice-class&#39;在HTML中。
我使用了这个xPath表达式,但是即使另一个存在,它总是会返回&#39; price-class&#39;当“新价格”类存在时,我只想要该值。如果它不存在,那么我想要&#39; price&#39; -class值。
//span[@class='price'] | //[span[@class='newPrice']
我怎样才能做到这一点?有什么想法吗?
答案 0 :(得分:4)
或许有助于以不同方式制定条件:
如果<span>
没有class="price"
元素,则只需class="newPrice"
选择。 否则您想要class="newPrice"
。
//span[(not(//span[@class="newPrice"]) and @class="price") or @class="newPrice"]
此Xpath表达式将返回您要查找的元素。
解释:第一个条件可以在谓词中写成以下内容:
not(//span[@class="newPrice"]) and @class="price"
第二个条件就像你已经拥有它一样:
@class="newPrice"
使用正确的括号,您可以将其与or
运算符结合使用:
//span[
(
not(//span[@class="newPrice"])
and @class="price"
)
or
@class="newPrice"
]
并且由于您希望以字符串形式获取价格值,因此它在PHP示例代码中的外观如下:
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$expression = 'string(//span[(not(//span[@class="newPrice"]) and @class="price") or @class="newPrice"])';
echo "your price: ", $xpath->evaluate($expression), "\n";
输出:
your price: $4.000,00