我知道有很多关于使用 XSLT 进行合并和分组的文章,但是我找不到一篇专门针对我的情况的文章,说实话,我认为对于像我这样的偶尔开发人员来说,在 XSLT 中进行合并/分组相当复杂。尤其是当嵌套 xml 中有多个“数组”时。与我的文章类似的文章是 fe: 使用 XSLT 合并 XML 节点 ... 但在那篇文章中,这是在一个“场景”内进行分组,而不是在不同的“场景”上进行分组。
我的情况如下:
我想将两个“消息”元素(始终是两个)合并到一个 XML 文件(根 = “消息”)。合并的“消息”中还应根据对象的 ID 合并“对象”元素,并且仅保留合并的“对象”元素。
例子:
初始 XML:
<?xml version="1.0" encoding="UTF-8"?>
<messages>
<message>
<submessage>
<object>
<ID>991</ID>
<Extra>ABC</Extra>
</object>
<object>
<ID>992</ID>
<Extra>BCD</Extra>
</object>
<object>
<ID>993</ID>
<Extra>CDE</Extra>
</object>
</submessage>
</message>
<message>
<submessage>
<object>
<ID>992</ID>
<Name>Marcel</Name>
<Description>XXX</Description>
</object>
<object>
<ID>993</ID>
<Name>Peter</Name>
<Description>YYY</Description>
</object>
<object>
<ID>994</ID>
<Name>Lola</Name>
<Description>ZZZ</Description>
</object>
</submessage>
</message>
</messages>
结果 XML:
<?xml version="1.0" encoding="UTF-8"?>
<messages>
<message>
<submessage>
<object>
<ID>992</ID>
<Name>Marcel</Name>
<Description>XXX</Description>
<Extra>BCD</Extra>
</object>
<object>
<ID>993</ID>
<Name>Peter</Name>
<Description>YYY</Description>
<Extra>CDE</Extra>
</object>
</submessage>
</message>
</messages>
如您所见,结果 XML 应仅包含消息对象 ID 与另一消息对象 ID 匹配的对象。对于此示例,这意味着第一条消息中 ID 为 991 的对象和另一条消息中 ID 为 994 的对象将被删除,但 992 和 993 可以保留并与对象内的所有元素合并。仅供参考:“子消息”元素在每个“消息”元素中仅出现一次。
有人可以告诉我如何使用 XSLT 1.0 来实现这一点吗?
先感谢您。