如何在php中查看DOMNodeList对象的数据

ahm*_*med 11 php xpath dom domdocument

当我想测试php数组时,我使用以下代码

    print_r($myarray);
Run Code Online (Sandbox Code Playgroud)

但我知道我想看到对象的数据

    $xpath = new DOMXPath($doc);
    $myobject = $xpath->query('//*[ancestor-or-self::a]');
Run Code Online (Sandbox Code Playgroud)

我用的时候

    print_r($myobject);
Run Code Online (Sandbox Code Playgroud)

我得到了那个输出

    DOMNodeList Object ( )
Run Code Online (Sandbox Code Playgroud)

我想迭代这个对象的值来测试我的查询结果?

ghb*_*att 21

DOMNodeList是一个有趣的对象,你不会从使用print_r或获取太多信息var_dump.

有许多方法可以查看DOMNodeList对象的数据.这是一个例子:

$xpath = new DOMXpath($dom);
$dom_node_list = $xpath->query($your_xpath_query);
$temp_dom = new DOMDocument();
foreach($dom_node_list as $n) $temp_dom->appendChild($temp_dom->importNode($n,true));
print_r($temp_dom->saveHTML());
Run Code Online (Sandbox Code Playgroud)

(当然,如果要处理XML,请使用saveXML而不是saveHTML.)

DOMNodeList可以像数组一样迭代.如果要从DOMNodeList对象中提取数据并将其放入不同的数据结构(例如数组或stdClass对象),则只需遍历DOMNodeList中的"节点",转换节点的值和/或在将属性添加到新数据结构之前(您希望可用).

  • 谢谢。print_r 在 dom 对象上失败的事实在很多方面都很糟糕。 (2认同)

dan*_*dds 6

可以使用简单的 foreach 来浏览节点,如下所示:

foreach ($myobject as $node) {

  echo $node->nodeValue, PHP_EOL;

} // end foreach 
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助其他人,重要的代码是

foreach 
Run Code Online (Sandbox Code Playgroud)

和项目

$node->nodeValue
Run Code Online (Sandbox Code Playgroud)

有关此课程的更多详细信息,请访问:

http://php.net/manual/en/class.domnodelist.php


Rya*_*yan 0

var_dump($myobject);可能就是您正在寻找的

  • 谢谢,但是当我使用 var_dump 时,我得到这个输出“object(DOMNodeList)#9 (0) { }”,我确信这不是我正在寻找的输出,因为 myobject 有大量数据。 (2认同)