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

问题描述 投票:0回答:1

我有一个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?"
}

为什么这是为什么我不能看到属性的数量,或者为什么不是DOMNamedNodeMap返回,因为the documentation说它应该是?

我尝试过使用xPath而不是getElementsByTagName函数,但是遇到了同样的问题。

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

php dom
1个回答
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。

© www.soinside.com 2019 - 2024. All rights reserved.