ここにはxml/xsltマージ関連の質問がほとんどないことは知っていますが、私が抱えている問題を解決するものはないようです.
私が探しているのは XSLT (可能な限り汎用 - 入力 XML ファイルの構造に厳密ではない) です。
a.xml を b.xml とマージし、次のような方法で c.xml を生成します。
- c.xml には、a.xml と b.xml の間の共通ノードが含まれます (ノード値は a.xml から取得されます)。
- さらに、c.xml には、a.xml ではなく b.xml に存在するノード (および値) が含まれます。
例: a.xml のマージ:
<root_node>
<settings>
<setting1>a1</setting1>
<setting2>a2</setting2>
<setting3>
<setting31>a3</setting31>
</setting3>
<setting4>a4</setting4>
</settings>
</root_node>
b.xmlを使用:
<root_node>
<settings>
<setting1>b1</setting1>
<setting2>b2</setting2>
<setting3>
<setting31>b3</setting31>
</setting3>
<setting5 id="77">b5</setting5>
</settings>
</root_node>
c.xmlを生成します:
<root_node>
<settings>
<setting1>a1</setting1>
<setting2>a2</setting2>
<setting3>
<setting31>a3</setting31>
</setting3>
<setting5 id="77">b5</setting5>
</settings>
追加情報
私が理解していることを「共通ノード」で説明しようとします。私は専門家ではないので、これは正確な xml/xslt 定義ではないかもしれません。
a /root_node/settings/ setting1は、 b /root_node/settings/ setting1を持つ「共通ノード」です。これは、2 つのノードが同じパスを使用して到達するためです。設定 2 と設定 3 についても同様です。
2 つの「非共通ノード」は、 a.xmlでのみ検出される/root_node/settings/ setting4 (出力には含まれない) と、b.xml でのみ検出されるb /root_node/settings/ setting5 (それは出力に入るはずです)。
「一般的なソリューション」とは、入力 XML がどのような形式であっても機能するという意味ではありません。つまり、「これは a.xml 内のノードが一意である場合にのみ機能する」などの制限を追加したり、適切だと思われるその他の制限を追加したりしながら、xslt にハードコードの xpath を含めてはならないということです。