php DOMDocument:html到节点树
此函数用于将html转换为节点树(php DOMDocument:html到节点树,php,html,html-parsing,domdocument,Php,Html,Html Parsing,Domdocument,此函数用于将html转换为节点树(结构)。但是,每个节点都作为前一个节点的子节点返回,即使该节点是当前节点的同级节点 $xml = ' <div> <div> <b></b> </div> <p></p> </div> '; function xml2array($xml,&$result = '') { foreach($xml->c
结构)。但是,每个节点都作为前一个节点的子节点返回,即使该节点是当前节点的同级节点
$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);
$xml='1!'
';
函数xml2array($xml,&$result=''){
foreach($xml->children()作为$name=>$xmlchild){
xml2array($xmlchild,$result);
}
$result=“- ”$xml->getName().$result。”
”;
}
$result='';
$dd=xml2array(simplexml\u load\u字符串($xml),$result);
回声“;
打印(结果);
上述代码返回以下内容:
- div
- p
- div
- b
您注意到'div'现在是'p'的子级,即使他们是兄弟姐妹,'div'出现在'p'之后,与原始输入不同
它应该是这样的:
- div
- div
b
- p
这是一个未中断的函数,删除了引用调用,因为如果您不知道它们到底是什么,可能会出现模糊的错误(并且您可能知道如何/何时使用它们,下一个程序员可能会遇到困难,引用最好有一个非常明确的原因使用,或者根本不使用):
children();
if(空($children))返回“”;
$result='';
foreach($xml->children()作为$name=>$xmlchild){
$result.='- 。$name.xml2ul($xmlchild)。
;
}
$result.='
';
返回$result;
}
echo xml2ul(simplexml\u load\u字符串($xml),$result);
SimpleXML
不是DOMDocument
(尽管两者都使用libxml
),而且确实,函数的逻辑是错误的,不是xml库。@Wrikken:我从一个SO用户那里得到了这个函数。我对DOMDocument类知之甚少。再说一遍:没有使用任何一个DOMDocument
类。而另一个用户给了你坏代码。
<ul>
<li>div
<ul>
<li>p
<ul>
<li>div
<ul>
<li>b</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<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);