我有两个文件,其中包含单独收集的相关信息。当每个处理器收集完相同格式的 xml 数据后,如何使用 XSLT 合并两个 xml 文件?
例如:
AllSets_Names.xml
<Sets>
<Set id="1">
<SetName>World Champ Decks 1999</SetName>
</Set>
<Set id="2">
<SetName>World Champ Decks 1999</SetName>
</Set>
<Set id="3">
<SetName>World Champ Decks 1999</SetName>
</Set>
<Set id="4">
<SetName>World Champ Decks 1999</SetName>
</Set>
<Set id="5">
<SetName>World Champ Decks 1999</SetName>
</Set>
</Sets>
AllSets_ShortNames.xml
<Sets>
<Set id="1">
<SetShortName>W99</SetShortName>
</Set>
<Set id="2">
<SetShortName>W00</SetShortName>
</Set>
<Set id="3">
<SetShortName/>
</Set>
<Set id="4">
<SetShortName>WD2</SetShortName>
</Set>
<Set id="5">
<SetShortName>WD3</SetShortName>
</Set>
</Sets>
所需输出:AllSets_NamesAndShortNames.xml
<Sets>
<Set id="1">
<SetName>World Champ Decks 1999</SetName>
<SetShortName>W99</SetShortName>
</Set>
<Set id="2">
<SetName>World Champ Decks 1999</SetName>
<SetShortName>W00</SetShortName>
</Set>
<Set id="3">
<SetName>World Champ Decks 1999</SetName>
<SetShortName/>
</Set>
<Set id="4">
<SetName>World Champ Decks 1999</SetName>
<SetShortName>WD2</SetShortName>
</Set>
<Set id="5">
<SetName>World Champ Decks 1999</SetName>
<SetShortName>WD3</SetShortName>
</Set>
</Sets>
最佳答案
实现此目的的一个好方法是使用分组:
<xsl:template name="main">
<Sets>
<xsl:for-each-group
select="document(('Names.xml','ShortNames.xml'))/Sets/Set"
group-by="@id">
<Set>
<xsl:copy-of select="current-group()/(@*, *)"/>
</Set>
</xsl:for-each-group>
</Sets>
</xsl:template>
关于xml - 如何使用 XSLT(可以是 XSLT 2.0)合并两个 XML 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31215406/