我有一个HTML文件,正在尝试使用DOM查找所有id
元素的<h2>
属性:
$html = new DOMDocument;
$html->loadHTML($file);
$headings = $html->getElementsByTagName('h2');
将按预期返回DOMNodeList
,其计数等于我文档中标题的数量。当我对此进行迭代并尝试探索通过var_dump
或print_r
返回的数据时,属性列表出现了(省略对象值)错误:
object(DOMElement)#10 (18) {
["tagName"]=>
string(2) "h2"
["schemaTypeInfo"]=>
NULL
["nodeName"]=>
string(2) "h2"
["nodeValue"]=>
string(10) "What next?"
["nodeType"]=>
int(1)
["parentNode"]=>
string(22) "(object value omitted)"
["childNodes"]=>
string(22) "(object value omitted)"
["firstChild"]=>
string(22) "(object value omitted)"
["lastChild"]=>
string(22) "(object value omitted)"
["previousSibling"]=>
string(22) "(object value omitted)"
["nextSibling"]=>
string(22) "(object value omitted)"
["attributes"]=>
string(22) "(object value omitted)"
["ownerDocument"]=>
string(22) "(object value omitted)"
["namespaceURI"]=>
NULL
["prefix"]=>
string(0) ""
["localName"]=>
string(2) "h2"
["baseURI"]=>
NULL
["textContent"]=>
string(10) "What next?"
}
这是为什么,为什么我看不到属性的数量,或者为什么不按the documentation的说明返回DOMNamedNodeMap
?
我尝试使用xPath而不是getElementsByTagName
函数,但是存在相同的问题。
如何检索属性?我看不到这样做的方法吗?
答案 0 :(得分:0)
文档中指出
getElementsByTagName
返回一个DOMNodeList
(getElementsByTagName)DOMNodeList
的项目将返回DOMNode
的(DOMNodeList)返回的实际项目不是DOMNodes
,而是DOMElements
(扩展了前者)。
在这些项目上使用var_dump()
或print_r()
仍会给出(忽略对象值)字符串,但是这似乎不是错误消息。 DOMElements有一个方法getAttribute(string $name)
,您可以调用该方法来获取属性:
$html = new DOMDocument;
$html->loadHTML($file);
$headings = $html->getElementsByTagName('h2');
foreach ($headings as $heading) {
echo($heading->getAttribute('id'));
}
这有效并打印所有标题两个标签的ID。