循环DOMDocument是怎么使用的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (31)

有没有简单的方法来循环解析文档?所以我想循环这样的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

我还得到了这样的结果:

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 Simple HTML DOM Parser和以下代码:

<?php
require_once 'simplehtmldom/simple_html_dom.php';

function iterateHtmlElements($html)
{
    $dom = str_get_html($html);
    $dom->set_callback('handleElement');
    $dom->__toString();
    echo "\n";
}

function handleElement(simple_html_dom_node $elem)
{
    if($elem->tag == 'text') {
        echo $elem->innertext();
    }
    else {
        echo "\n" . $elem->tag . ": ";
    }
}

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

我使用你提供的输入来检查它,并得到以下结果:

> php test2.php

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

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励