我遵循这个问题robust的建议Mature HTML Parser for PHP关于解析可能与DOMDocument格式不正确的html的建议。

有没有简单的方法可以循环遍历已解析的文档?所以我想像这样循环遍历html。

$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建议的代码,并且得到了这样的结果。
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);
        }
    }
}

关于php - 遍历DOMDocument,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2909849/

10-15 08:26