簡體   English   中英

php DOMDocument:html到節點樹

[英]php DOMDocument: html to node tree

此函數將html轉換為節點樹( <ul>結構)。 但是,每個節點都將作為先前節點的子節點返回, 即使該節點是當前節點的同級節點。

$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>

在這里,您可以使用一個不中斷的函數,並刪除了通過引用進行的調用,因為如果您不確切知道它們是什么,則可能會出現難以理解的錯誤(並且您可能知道如何/何時使用它們,下一個編碼器可能會遇到困難,引用最好用一個非常明確的理由或不使用在所有):

<?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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM