所以假设我想获取第一个 h2 元素。我在谷歌上搜索的印象是
$xpath->query('(//h2)[1]');
应该可以工作,但这仍然返回一个 DOMNodeList 而不是一个节点。那么这里出了什么问题?
所以假设我想获取第一个 h2 元素。我在谷歌上搜索的印象是
$xpath->query('(//h2)[1]');
应该可以工作,但这仍然返回一个 DOMNodeList 而不是一个节点。那么这里出了什么问题?
但是那个 [
$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)');
我希望这是有帮助的。