第一个输入文件:
<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然后我们在第二个文件中找到了 同样的水果id = 1,每个水果id = 1的孩子我们都会被放进去 第一个文件中fruit id = 1的节点。
如果水果ID不同,我们只需将其添加为新节点(不是 在水果id = 1)
我们可以假设合并将基于'fruit'节点,所以 我们可以在xslt文件中使用变量'fruit'来简化它。
并且它必须位于相同的节点ID下(上例中的N1)。
谢谢。
约翰