最初の入力ファイル:
<root>
<node id="N1">
<fruit id="1" action="aaa">
<orange id="x">
<attribute>
<color>Orange</color>
<year>2000</year>
</attribute>
</orange>
</fruit>
</node>
</root>
2 番目の入力ファイル:
<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 のみを使用するだけでそれを行うことは可能ですか? 問題の一般化された解決策について教えてください。
マージのアルゴリズム:
最初にノード フルーツ id=1 を見つけ、次に 2 番目のファイルで同じフルーツ id=1 を見つけます。フルーツ id=1 のすべての子は、最初のファイルのフルーツ id=1 のノード内に配置されます。
果物 ID が異なる場合は、単純に新しいノードとして追加します (
果物 ID=1 の下ではありません) 。マージは「fruit」ノードに基づくと想定できるため、xslt ファイルで変数「fruit」を使用して簡単にすることができます。
また、同じノード ID (上記の例では N1) の下にある必要があります。
ありがとうございました。
ジョン