我有一个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?"
}
为什么这是为什么我不能看到属性的数量,或者为什么不是DOMNamedNodeMap
返回,因为the documentation说它应该是?
我尝试过使用xPath而不是getElementsByTagName
函数,但是遇到了同样的问题。
如何检索属性?我看不到这样做的方法?
虽然文件说明了这一点
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。