【发布时间】: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>
【问题讨论】:
-
SimpleXML是 notDOMDocument(虽然两者都使用libxml),确实,你的函数的逻辑是错误的,而不是他的xml库。跨度> -
@Wrikken:我从 SO 用户 stackoverflow.com/questions/5528321/… 那里得到了这个功能。我不太了解 DOMDocument 类。
-
再一次:没有使用单一的
DOMDocument类。那个其他用户给了你损坏的代码。
标签: php html html-parsing domdocument