【发布时间】:2018-02-20 15:37:57
【问题描述】:
我有一个类似 ip=["A-B-C-D","A-B-E-D","A-B-F-D"] 的数组。现在我必须基于这个层次结构创建一个 XML。 XML 的预期输出将是。
<start>
<comm>
<name>A</name>
<comm>
<name>B</name>
<comm>
<name>C</name>
<comm>
<name>D</name>
</comm>
</comm>
<comm>
<name>E</name>
<comm>
<name>D</name>
</comm>
</comm>
<comm>
<name>F</name>
<comm>
<name>D</name>
</comm>
</comm>
</comm>
</comm>
基本上,C、E 和 F 将是兄弟姐妹,它们将位于 <comm><name>C/E/F</name></comm> 部分内,然后在该标签内将是 D。每个元素都需要位于 comm 和名称标签内。
我已经完成了如下代码,
$basecomm = $doc->createElement( "start" );
$doc->appendChild( $basecomm );
$base = $doc->getElementsByTagName("comm");
foreach($ip as $input){
$arr=explode("-",$input);
foreach ($arr as $a){
$newcomm=null;
foreach ( $base as $community ) {
foreach($community->childNodes as $nextElement){
if ( $nextElement instanceof DOMElement
&& $nextElement->tagName == 'name' && $nextElement->nodeValue==$a) {
$newcomm = $nextElement->parentNode;
}
}
}
if($newcomm==null){
$newcomm=$doc->createElement("comm");
$xml_comm_name=$doc->createElement("name",htmlspecialchars($a));
$newcomm->appendChild($xml_comm_name);
$basecomm->appendChild($newcomm);
}
$basecomm=$newcomm;
}
}
我的问题是整个 XML 正在正确生成,但值 D 仅显示为 C 的子级,而不是 E 和 F。那么如何修复我的代码来做到这一点?任何帮助表示赞赏。谢谢。
【问题讨论】:
-
你已经问过stackoverflow.com/questions/46093385/…发生了什么变化?
-
@u_mulder 我问过上一个问题,因为我想知道如何在构建层次结构时命名节点。在这里,我只使用节点内的值,而标签名称保持不变。