XPath查询只能返回最后一个匹配的原因是什么?我正在对一个显然有多个<a name="...">
标签的HTML片段运行查询,但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);
...
}
答案 0 :(得分:4)
您需要探测$rows->length
。原因是$rows
是DOMNodeList
的实例(一个包含DOMNode
个实例列表的对象)。由于DOMNodeList
未实现接口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)
}
......等等。