这是输入文件:
<root>
<node id="N1">
<fruit id="1" action="aaa">
<orange id="x" action="create">
<attribute>
<color>Orange</color>
<year>2012</year>
</attribute>
</orange>
<orange id="x" action="change">
<attribute>
<color>Red</color>
</attribute>
</orange>
<orange id="x" action="change">
<attribute>
<color>Blue</color>
<condition>good</condition>
</attribute>
</orange>
</fruit>
</node>
<node id="N2">
<car id="1">
<bmw id="i" action="change">
<attribute>
<color>Blue</color>
</attribute>
</bmw>
<bmw id="i" action="change">
<attribute>
<color>Yellow</color>
</attribute>
</bmw>
<bmw id="i" action="change">
<attribute>
<color>Pink</color>
</attribute>
</bmw>
<bmw id="j" action="delete">
<attribute>
<color>Blue</color>
</attribute>
</bmw>
<bmw id="j" action="delete">
<attribute>
<color>Yellow</color>
</attribute>
</bmw>
</car>
</node>
</root>
这是预期的输出:
<root>
<node id="N1">
<fruit id="1" action="aaa">
<orange id="x" action="create">
<attribute>
<color>Blue</color>
<year>2012</year>
<condition>good</condition>
</attribute>
</orange>
</fruit>
</node>
<node id="N2">
<car id="1">
<bmw id="i" action="change">
<attribute>
<color>Pink</color>
</attribute>
</bmw>
<bmw id="j" action="delete">
<attribute>
<color>Yellow</color>
</attribute>
</bmw>
</car>
</node>
</root>
规则:
如果有一个带有“create”方法的节点后跟一个或多个“change”方法,我们将它们合并在一起,并将最后一个“change”中的所有子节点使用“create”方法。(注:好是加的)
如果有一个或多个“更改”方法,我们将它们合并并仅使用最后一个“更改”方法的子级。
如果有一个或多个“删除”方法,我们将它们合并并仅使用最后一个“删除”方法的子项。
请注意,要合并的节点的 id 必须相同。
请告诉我有关此问题的 XSLT 解决方案。非常感谢。
亲切的问候,约翰