我知道这里很少有与 xml/xslt 合并相关的问题,但似乎没有一个可以解决我遇到的问题。
我正在寻找的是一个 XSLT(尽可能通用 - 与输入 XML 文件的结构不紧密),它可以
将 a.xml 与 b.xml 合并并以这样的方式生成 c.xml
- c.xml 将包含 a.xml 和 b.xml 之间的公共节点(节点值取自 a.xml)
- 此外,c.xml 将包含 b.xml 中而不是 a.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个“非公共节点”是一个/root_node/settings/ setting4仅在 a.xml 中找到(它不应该出现在输出中)和b /root_node/settings/ setting5仅在 b.xml 中找到(它应该进入输出)。
我所说的“通用解决方案”并不是指可以使用任何输入 XML 格式的东西。我的意思是 xslt 不应该包含硬编码的 xpath,而您可能会添加诸如“这仅在 a.xml 中的节点是唯一的时才有效”之类的限制,或者您可能认为合适的任何其他限制。