この入力ファイルが xml にある場合:
<root>
<node id="N1">
<fruit id="1">
<orange id="x" action="create">
<attribute>
<color>Orange</color>
<year>2000</year>
</attribute>
</orange>
</fruit>
<fruit id="1">
<orange id="x" action="create">
<attribute>
<color>Orange</color>
<condition>good</condition>
</attribute>
</orange>
</fruit>
</node>
</root>
期待される出力は次のとおりです。
<root>
<node id="N1">
<fruit id="1">
<orange id="x" action="create">
<attribute>
<color>Orange</color>
<year>2000</year>
<condition>good</condition>
</attribute>
</orange>
</fruit>
<fruit id="1">
</fruit>
</node>
</root>
2 つの兄弟間を簡略化する方法:
- 親が同じかどうかを確認します (フルーツ id=1)
- ノード ID とアクションが同じかどうかを確認します (orange id=x action=create)
- 子要素が既に定義されていて、値が同じ (オレンジ色) の場合、それを削除します。
- 2 番目の兄弟の子要素が以前に定義されていない場合、その 2 番目のノードを最初のノードに追加します。(状態良好)
- ノードがすでに定義済みであるが値が異なる場合 (color-red など)、ノードをそのままにします。
別のシナリオ: input2:
<root>
<node id="N1">
<fruit id="1">
<orange id="x" action="create">
<attribute>
<color>Orange</color>
</attribute>
</orange>
</fruit>
<fruit id="1">
<orange id="x" action="create">
<attribute>
<color>Red</color>
<condition>good</condition>
</attribute>
</orange>
</fruit>
</node>
</root>
予想される出力:
<root>
<node id="N1">
<fruit id="1">
<orange id="x" action="create">
<attribute>
<color>Orange</color>
<condition>good</condition>
</attribute>
</orange>
</fruit>
<fruit id="1">
<orange id="x" action="create">
<attribute>
<color>Red</color>
</attribute>
</orange>
</fruit>
</node>
</root>
別のシナリオ:
<root>
<nodeA id="A">
<fruit id="1">
<orange id="x" action="delete" /> <!-- no attributes here -->
</fruit>
<fruit id="1">
<orange id="x" action="delete"/>
<orange id="y" action="delete" />
</fruit>
</nodeA>
</root>
期待される出力:
<root>
<nodeA id="A">
<fruit id="1">
<orange id="x" action="delete" />
</fruit>
<fruit id="1">
<orange id="y" action="delete" />
</fruit>
</nodeA>
</root>
この例で明確なアイデアが得られることを願っています。変換ファイルを手伝ってください。ありがとう。
ジョン