以下の入力にはXSLTが必要です。この変換の目的は、特定のアイテムが削除または再作成されたかどうかを識別することです。
入力例は次のとおりです。 最初のシナリオ:
<root>
<nodeA id="a">
<object id="1">
<item1 id="xx" method="create">
<attr>
<color>yellow</color>
</attr>
</item1>
</object>
<object id="1">
<item1 id="xx" method="change">
<any>blah</any>
<attr>
<color>green</color>
</attr>
</item1>
<item1 id="xx" method="delete" />
</object>
<object id="2">
<item1 id="yy" method="create">
<any>aaa</any>
</item1>
</object>
</nodeA>
</root>
出力:
<root>
<nodeA id="a">
<object id="1">
</object>
<object id="1">
<item1 id="xx" method="delete" />
</object>
<object id="2">
<item1 id="yy" method="create">
<any>aaa</any>
</item1>
</object>
</nodeA>
</root>
上記の最初のシナリオでは、item1が作成、変更、削除されたことがわかります。つまり、最終的には削除されます。そのため、を保持し<item1 id="xx" method="delete" />
、もう一方を無視します。
2番目のシナリオ:
<root>
<nodeB id="a">
<object id="2">
<item2 id="xx" method="create">
<attr>
<color>yellow</color>
</attr>
</item2>
</object>
<object id="2">
<item2 id="xx" method="change">
<attr>
<color>green</color>
</attr>
</item2>
<item2 id="xx" method="delete" /> <!-- because deletion occurs here, we disregard any previous node up until this delete -->
<item2 id="xx" method="create"> <!-- we keep this node and any node afterwards -->
<attr>
<color>pink</color>
</attr>
</item2>
<item2 id="xx" method="change">
<any>blah</any>
<attr>
<color>red</color>
</attr>
</item2>
</object>
<object id="3">
<item2 id="yy" method="create">
<any>ccc</any>
</item2>
</object>
</nodeB>
</root>
出力:
<root>
<nodeB id="a">
<object id="2">
</object>
<object id="2">
<item2 id="xx" method="create">
<attr>
<color>pink</color>
</attr>
</item2>
<item2 id="xx" method="change">
<any>blah</any>
<attr>
<color>red</color>
</attr>
</item2>
</object>
<object id="3">
<item2 id="yy" method="create">
<any>ccc</any>
</item2>
</object>
</nodeB>
</root>
2番目のシナリオでは、item2が作成および変更された後、削除されてから再作成および/または再変更されていることがわかります。そのため、削除するまではすべてのノードを無視し、その後はすべてのノードのみを保持します。
結論として:
作成/変更/.../削除->削除になります
create / change /.../ delete / create2 / change2 / ...-> create2 / change2 / .. ..
どんな助けでも大歓迎です。ありがとう。
ジョン