1

所以假设我想获取第一个 h2 元素。我在谷歌上搜索的印象是

$xpath->query('(//h2)[1]');

应该可以工作,但这仍然返回一个 DOMNodeList 而不是一个节点。那么这里出了什么问题?

4

1 回答 1

2

但是那个 [ $xpath->query('(//h2)[1]');] 仍然返回一个 DOMNodeList 而不是一个节点。那么这里出了什么问题?

如果 xpath 表达式使用的语法正确,该DOMXpath::query()方法总是返回 a 。DOMNodeList永远不会返回单个DOMNode元素。

所以这不是一个Still而只是一个is。因此,您需要通过该item()方法访问该节点列表的第一个元素(与 xpath 谓词中的单索引不同,它的索引为零):

$h2 = $xpath->query('(//h2)[1]')->item(0);

请注意,如果 xpath 表达式无效,则该query方法将返回FALSE,这会在此处导致致命错误。所以有时您需要先验证返回值(例如,如果您动态创建 xpath 表达式)。

如果您最终只想获取该 h2 元素的文本内容(字符串值),您也可以使用该DOMXpath::evaluate()方法。每个 xpathstring()函数将获取集合中第一个节点的文本值只是一个空字符串:

$h2Text = $xpath->evaluate('string(//h2)');

我希望这是有帮助的。

于 2013-06-23T19:51:44.297 回答