循环遍历 DOMDocument [英] Loop over DOMDocument

查看:23
本文介绍了循环遍历 DOMDocument的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在遵循这个问题的建议 Robust, 成熟的 HTML 解析器对于 PHP,关于使用 DOMDocument.

I am following the suggestion from this question Robust, Mature HTML Parser for PHP, about parsing html that may be malformed with DOMDocument.

有什么简单的方法可以遍历解析的文档吗?所以我想像这样循环 html.

Is there any easy way to loop over the parsed document? So I would like to loop over html like this.

$html='<ul>
         <li>value1</li>
         <li>value1</li>
         <li>value3
            <p>subvalue</p>
         </li>
        </ul>
        <p>hello world</p>';

$doc = new DOMDocument();
$doc->loadHTML($html);
???
foreach (??? as $node)
{
  print $node->nodeName.':'.$node->nodeValue;
}

得到类似这样的结果.

 ul:
 li:value1
 li:value2
 li:value3
 p:subvalue
 p:hello world

单独使用 $doc->childNodes 并不能真正做到我想要的.因为它似乎没有下降到树中的较低分支.我使用了 halfdan 建议的代码,我得到了这样的结果.

Using $doc->childNodes by itself doesn't really do what I want. Since it doesn't seem to go down to lower branches in the tree. I used the code suggested by halfdan and I get results like this.

html:
html:value1
         value1
         value3
            subvalue

        hello world

推荐答案

试试这个:

$doc = new DOMDocument();
$doc->loadHTML($html);
showDOMNode($doc);

function showDOMNode(DOMNode $domNode) {
    foreach ($domNode->childNodes as $node)
    {
        print $node->nodeName.':'.$node->nodeValue;
        if($node->hasChildNodes()) {
            showDOMNode($node);
        }
    }    
}

这篇关于循环遍历 DOMDocument的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆