【发布时间】:2011-04-08 19:23:17
【问题描述】:
我正在使用 PHP5,我需要将 XML 转换为以下形式:
<list>
<item label="(1)">some text</item>
<item label="(2)">
<anotherNode>some text</anotherNode
<item label="a">some text</item>
<item label="b">some text</item>
</item>
</list>
变成这样:
<list>
<item label="(1)">some text</item>
<item label="(2)">
<anotherNode>some text</anotherNode>
<list> <!-- opening new wrapper node-->
<item label="a">some text</item>
<item label="b">some text</item>
</list> <!-- closing new wrapper node-->
</item>
</list>
正如您在上面看到的,我需要将包装器节点添加到尚未被“列表”节点包装的任何“项目”节点。
将源 xml 转换为目标 xml 的可能解决方案是什么?
更新:
注意 1:任何单个或一组 <item> 节点如果尚未包装,则需要由 <list> 节点包装。
注意2:需要保持内容的顺序。
注 3:
如果<anotherNode> 前后有<item> 节点。
它应该改变这个:
<list>
<item label="(1)">some text</item>
<item label="(2)">
<item label="a">some text</item>
<item label="b">some text</item>
<anotherNode>some text</anotherNode>
<item label="c">some text</item>
<item label="d">some text</item>
</item>
</list>
进入这个:
<list>
<item label="(1)">some text</item>
<item label="(2)">
<list> <!-- opening new wrapper node-->
<item label="a">some text</item>
<item label="b">some text</item>
</list> <!-- closing new wrapper node-->
<anotherNode>some text</anotherNode>
<list> <!-- opening new wrapper node-->
<item label="c">some text</item>
<item label="d">some text</item>
</list> <!-- closing new wrapper node-->
</item>
</list>
谢谢,
【问题讨论】:
-
好问题 (+1)。请参阅我的答案以获取本着 XSLT 精神的简短解决方案。
-
@Benjamin-Ortuzar:你忘记接受答案了吗?还是不完全满意?