gpt4 book ai didi

php - 为什么 'child' 和 'descendant' 在这个 domdocument() 查询中给出相同的结果?

转载 作者:行者123 更新时间:2023-12-03 16:12:40 25 4
gpt4 key购买 nike

我正在尝试从以下 HEREDOC 中的链接中检索文本。

$html = <<<EOT
<a class="details" href="/link.asp">$2,697.75</a>
<a class="details" href="/link.asp"><s>$150.00</s></a>
<a class="details" href="/link.asp"><font color="red" size="2"><b>Price: $125.00</b></font></a>
EOT;

libxml_use_internal_errors(true);

$dom = new DOMDocument();
$dom->loadhtml($html);
$xpath = new DOMXPath($dom);

$prices_nodeList = $xpath->query('//child::a[@class="details"]');
//$prices_nodeList = $xpath->query('//descendant::a[@class="details"]');
//$prices_nodeList = $xpath->query('//a[@class="details"]/descendant::text()');

foreach ($prices_nodeList as $price) {
$prices[] = $price->nodeValue;
}

echo("<p>prices</p>");
echo("<pre>");
print_r($prices);
echo("</pre>");

?>

分配给 $prices_nodeList 的 xpath 查询
$prices_nodeList = $xpath->query('//child::a[@class="details"]');

似乎做我想做的事,但我认为我不明白它是如何工作的。据我所知,它说“使用类“详细信息”获取链接的所有直接子元素。但是后两个链接中的文本不是直接子项,所以我不确定为什么我不必使用
$prices_nodeList = $xpath->query('//descendant::a[@class="details"]');

这(即 $prices_nodeList 的第一个注释掉的值)也检索所有三个值。我想知道为什么它们都有效,以及我的查询是否实际上是最好的方法。相比之下
$prices_nodeList = $xpath->query('//a[@class="details"]/descendant::text()');

也能用,但是
$prices_nodeList = $xpath->query('//a[@class="details"]/child::text()');

只检索第一个值 ($2,697.75) 而不是后两个(因为文本包含在元素中)。

最佳答案

As far as I can understand, it says 'get all direct child elements of links with class "details".'



不,这意味着获取所有具有类“详细信息”的链接,这些链接是当前上下文节点的子节点。

上下文节点是上一步选择的节点。
///descandant-or-self::node 的快捷方式.来自 specification :

// is short for /descendant-or-self::node()/. For example, //para is short for /descendant-or-self::node()/child::para and so will select any para element in the document (even a para element that is a document element will be selected by //para since the document element node is a child of the root node); div//para is short for div/descendant-or-self::node()/child::para and so will select all para descendants of div children.


/descendant-or-self::node()基本上选择每个节点。因此,查看 child 之间没有区别。或 descendant轴。

如果一个链接不是一个节点的 child ,它肯定是其后代之一的 child ,由 //选择。以及。

关于php - 为什么 'child' 和 'descendant' 在这个 domdocument() 查询中给出相同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311851/

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