gpt4 book ai didi

php - 带有可选子元素的xPath(如果存在则应返回)

转载 作者:行者123 更新时间:2023-12-03 17:03:54 27 4
gpt4 key购买 nike

我正在使用PHP的DOMDocument的xPath函数。

假设我有以下HTML(以说明我的问题):

<span class="price">$5.000,00</span>
<span class="newPrice">$4.000,00</span>


第一行始终可用,但是在某些情况下,“ newPrice-class”在HTML中。

我使用了这个xPath-expression,但是即使存在另一个,它也总是返回“ price-class”。当存在“ newPrice”类时,我只想要该值。如果不存在,那么我想要“价格”类的值。

//span[@class='price'] | //[span[@class='newPrice']


我该如何实现?有任何想法吗?

最佳答案

可能有助于以不同的方式表述条件:

仅当<span>没有元素时,才要选择class="price"元素。否则,您想要带有class="newPrice"的那个。

//span[(not(//span[@class="newPrice"]) and @class="price") or @class="newPrice"]


该Xpath表达式将返回您要查找的元素。

说明:谓词中的第一个条件可以写成以下形式:

not(//span[@class="newPrice"]) and @class="price"


第二个条件就像您已经拥有了:

@class="newPrice"


使用正确的括号,可以将其与 class="newPrice"运算符结合使用:

//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

关于php - 带有可选子元素的xPath(如果存在则应返回),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26102394/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com