PHP-html-Dom;问题是结果重复

PHP-html-Dom;问题是结果重复,php,dom,Php,Dom,尝试为div遍历dom并在执行时缩进它。它可以工作,除了有重复的。我可以保存到数组中并检查重复项,但不知道是否有更简单的方法。谢谢 function dom_parse_div_tag($htmlfile) { libxml_use_internal_errors(true); // supresses dom warnings $dom = new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->loadHTML

尝试为div遍历dom并在执行时缩进它。它可以工作,除了有重复的。我可以保存到数组中并检查重复项,但不知道是否有更简单的方法。谢谢

function dom_parse_div_tag($htmlfile)
{
 libxml_use_internal_errors(true); // supresses dom warnings
 $dom = new DOMDocument();
 $dom->preserveWhiteSpace = false;
 $dom->loadHTML($htmlfile);
 $nodes = $dom->getElementsByTagName("div");
 foreach ($nodes as $ii=>$node) {
     echo "<br>";
     $nodeclass = $node->attributes->getNamedItem('class');
     if (isset($nodeclass))
         echo "Class:" . $nodeclass->nodeValue ."<br>";
     dom_child_node_print($node,0);
 }
}

function dom_child_node_print($node,$level)
{
 echo "<br>";
 if($node->hasChildNodes()) {
    $nclass = $node->attributes->getNamedItem('class');
    if (isset($nclass))
        echobr("Class:" . $nclass->nodeValue);
    foreach ($node->childNodes as $ochildnode) {
        if($ochildnode->hasChildNodes()) {
            dom_child_node_print($ochildnode, $level + 1);
        }
        else {
            if (trim($ochildnode->nodeValue) !== "") {
                echo "Level$level," . strg_remove_linefeed($ochildnode->nodeValue) ."<br>";
            }
        }
    }
}
}
函数dom\u parse\u div\u标记($htmlfile)
{
libxml_use_internal_errors(true);//禁止dom警告
$dom=新的DOMDocument();
$dom->preserveWhiteSpace=false;
$dom->loadHTML($htmlfile);
$nodes=$dom->getElementsByTagName(“div”);
foreach($ii=>$node的节点){
回声“
”; $nodeclass=$node->attributes->getNamedItem('class'); if(isset($nodeclass)) echo“类:”.$nodeclass->nodeValue。“
”; dom_子节点节点打印($node,0); } } 函数dom\u child\u node\u print($node,$level) { 回声“
”; 如果($node->hasChildNodes()){ $nclass=$node->attributes->getNamedItem('class'); 如果(isset($nclass)) echobr(“类:.$nclass->nodeValue); foreach($node->childNodes作为$ochildnode){ 如果($ochildnode->hasChildNodes()){ dom_child_node_print($ochildnode,$level+1); } 否则{ 如果(修剪($ochildnode->nodeValue)!=“”){ 回显“Level$Level,”.strg_remove_linefeed($ochildnode->nodeValue)。“
”; } } } } }
<代码>你认为复制品是什么?你能举个HTML的例子吗?您也可以阅读关于
DOMXpath::evaluate()
。它将允许您以列表的形式获取节点,而无需递归。