gpt4 book ai didi

php - 为什么 XPath 查询只能返回最后一个匹配项?

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

XPath 查询只能返回最后一个匹配项的原因是什么?我正在对一个 HTML 片段运行查询,该片段显然有多个 <a name="...">标签,但 XPath 查询只会返回一个元素,而该元素恰好是最后一个元素。

function extract($html) {
// This test shows that the retrieved HTML fragment indeed contains multiple anchor tags
echo "<textarea>".$html."</textarea>";

// parse the data
$dom = new DomDocument();
@$dom->loadHTML($html); // we use @$dom to suppress some warnings
$xpath = new DOMXPath($dom);

// find the html code for the post
$query = "//a[contains(@name, 'post')]";
$rows = $xpath->query($query);

// This will return 1
echo "Elements found: " . count($rows);

...
}

最佳答案

您需要探测$rows->length。原因是 $rowsDOMNodeList 的实例。 (一个包含 DOMNode 实例列表的对象)。并且由于 DOMNodeList 没有实现接口(interface) Countable ,无法通过 count() 探测到正如您所期望的那样。它只是返回 1,因为它是单个对象,而不是它聚合的 DOMNode 数量。

因此,您的查询结果仅返回最后一个匹配项。它返回所有这些,您可以使用 foreach 迭代它们,如下所示:

foreach( $rows as $row )
{
// do something with $row (instance of DOMNode)
}

...或者使用 for 循环,如下所示:

for( $i = 0, $len = $rows->length; $i < $len; $i++ )
{
$row = $rows->item( $i );
// do something with $row (instance of DOMNode)
}

...等等

关于php - 为什么 XPath 查询只能返回最后一个匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13542049/

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