[英]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.