【问题标题】:php DOMDocument: html to node treephp DOMDocument: html 到节点树
【发布时间】:2011-07-28 16:49:54
【问题描述】:

此函数将 html 转换为节点树(<ul> 结构)。但是,如果该节点是当前节点的兄弟节点,则每个节点都会作为前一个节点 even 的子节点返回。

$xml = '
<div>

   <div>
       <b></b>
   </div>

   <p></p>

</div>
';


function xml2array($xml,&$result = '') {

    foreach($xml->children() as $name => $xmlchild) {
         xml2array($xmlchild, $result);

    }
    $result = "<ul><li>".$xml->getName().$result."</li></ul>";

}


$result='';
$dd = xml2array(simplexml_load_string($xml), $result);


echo "<pre>";
print_r($result);


上面的代码返回这个:

   <ul>
      <li>div
         <ul>
            <li>p
            <ul>
                <li>div
                       <ul>
                           <li>b</li>
                       </ul>
                 </li>
           </ul>
          </li>
      </ul>
   </li>
  </ul>


您注意到 'div' 现在是 'p' 的孩子,即使它们是兄弟姐妹,并且 'div' 出现在 'p' 之后,与原始输入不同。


它应该是这样的:

<ul>
    <li>div
    <ul>
     <li>div
       <ul>b</ul>
    </li>

    <li>p</li>

    </ul>
    </li>

</ul>

【问题讨论】:

  • SimpleXMLnot DOMDocument (虽然两者都使用libxml),确实,你的函数的逻辑是错误的,而不是他的xml库。跨度>
  • @Wrikken:我从 SO 用户 stackoverflow.com/questions/5528321/… 那里得到了这个功能。我不太了解 DOMDocument 类。
  • 再一次:没有使用单一的 DOMDocument 类。那个其他用户给了你损坏的代码。

标签: php html html-parsing domdocument


【解决方案1】:

给你,一个未损坏的函数,删除了引用调用,因为如果你不知道它们到底是什么,可能会出现模糊的错误(你可能知道如何/何时使用它们,下一个编码员可能会遇到困难,最好在非常明确的理由或根本没有理由的情况下使用引用):

<?php
$xml = '
<div>
   <div>
       <b></b>
   </div>
   <p></p>
</div>
';


function xml2ul($xml) {
    $children = $xml->children();
    if(empty($children)) return '';
    $result = '<ul>';
    foreach($xml->children() as $name => $xmlchild) {
        $result .= '<li>'.$name.xml2ul($xmlchild).'</li>';
    }
    $result .= '</ul>';
    return $result;
}

echo xml2ul(simplexml_load_string($xml), $result);

【讨论】:

    猜你喜欢
    • 2011-07-28
    • 2018-08-02
    • 2019-08-25
    • 2012-10-22
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多