第一个输入文件:
<root>
<node id="N1">
<fruit id="1" action="aaa">
<orange id="x">
<attribute>
<color>Orange</color>
<year>2000</year>
</attribute>
</orange>
</fruit>
</node>
</root>
第二个输入文件:
<root>
<node id="N1">
<fruit id="1">
<orange id="y">
<attribute>
<color>Orange</color>
<year>2000</year>
</attribute>
</orange>
<orange id="z">
<attribute>
<color>Orange</color>
<year>2000</year>
</attribute>
</orange>
</fruit>
<fruit id="2" action="bbb">
<orange id="x">
<attribute>
<color>Pink</color>
<year>2000</year>
</attribute>
</orange>
</fruit>
</node>
</root>
合并后的输出:
<root>
<node id="N1">
<fruit id="1" action="aaa">
<orange id="x">
<attribute>
<color>Orange</color>
<year>2000</year>
</attribute>
</orange>
<orange id="y">
<attribute>
<color>Orange</color>
<year>2000</year>
</attribute>
</orange>
<orange id="z">
<attribute>
<color>Orange</color>
<year>2000</year>
</attribute>
</orange>
</fruit>
<fruit id="2" action="bbb">
<orange id="x">
<attribute>
<color>Pink</color>
<year>2000</year>
</attribute>
</orange>
</fruit>
</node>
</root>
仅使用 XSLT 就可以做到这一点吗?请就该问题的通用解决方案告诉我。
合并算法:
首先找到节点fruit id=1,然后我们在第二个文件中找到相同的fruit id=1,fruit id=1 的每个孩子都将被放入第一个文件中fruit id=1 的节点内。
如果水果 id 不同,我们只需将其添加为新节点(不在
水果 id=1 下)我们可以假设合并将基于 'fruit' 节点,因此我们可以使用 xslt 文件中的变量 'fruit' 使其更容易。
它必须在相同的节点 ID 下(上例中的 N1)。
谢谢你。
约翰