尝试查找节点的属性时为什么会得到(省略对象值)?

时间:2018-09-03 20:28:26

标签: php dom

我有一个HTML文件,正在尝试使用DOM查找所有id元素的<h2>属性:

$html = new DOMDocument;
$html->loadHTML($file);
$headings = $html->getElementsByTagName('h2');

将按预期返回DOMNodeList,其计数等于我文档中标题的数量。当我对此进行迭代并尝试探索通过var_dumpprint_r返回的数据时,属性列表出现了(省略对象值)错误:

object(DOMElement)#10 (18) {
  ["tagName"]=&gt;
  string(2) "h2"
  ["schemaTypeInfo"]=&gt;
  NULL
  ["nodeName"]=&gt;
  string(2) "h2"
  ["nodeValue"]=&gt;
  string(10) "What next?"
  ["nodeType"]=&gt;
  int(1)
  ["parentNode"]=&gt;
  string(22) "(object value omitted)"
  ["childNodes"]=&gt;
  string(22) "(object value omitted)"
  ["firstChild"]=&gt;
  string(22) "(object value omitted)"
  ["lastChild"]=&gt;
  string(22) "(object value omitted)"
  ["previousSibling"]=&gt;
  string(22) "(object value omitted)"
  ["nextSibling"]=&gt;
  string(22) "(object value omitted)"
  ["attributes"]=&gt;
  string(22) "(object value omitted)"
  ["ownerDocument"]=&gt;
  string(22) "(object value omitted)"
  ["namespaceURI"]=&gt;
  NULL
  ["prefix"]=&gt;
  string(0) ""
  ["localName"]=&gt;
  string(2) "h2"
  ["baseURI"]=&gt;
  NULL
  ["textContent"]=&gt;
  string(10) "What next?"
}

这是为什么,为什么我看不到属性的数量,或者为什么不按the documentation的说明返回DOMNamedNodeMap

我尝试使用xPath而不是getElementsByTagName函数,但是存在相同的问题。

如何检索属性?我看不到这样做的方法吗?

1 个答案:

答案 0 :(得分:0)

文档中指出

返回的实际项目不是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。