xml - 如何使用 XSLT(可以是 XSLT 2.0)合并两个 XML 文档?

标签 xml xslt merge

我有两个文件,其中包含单独收集的相关信息。当每个处理器收集完相同格式的 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/

相关文章:

javascript - 内置浏览器 DOM 解析器 VS。 Javascript 框架解析器

string - XSLT 可以解析一串文本吗?

xslt - 根据条件应用整个模板或模板部分

swift - 使用 AVMutableComposition 将音轨合并到单个轨道中

git - 如何在不保存的情况下成功退出 "vimdiff"(用作 "git"的 merge 工具)?

android - 如何在 Android Studio 的 xml 中注释掉行)?

java - 如何以编程方式更改 EditText 底线

c# - "Type ' http ://www. w3.org/2000/09/xmldsig# :SignatureType ' is not declared" in XmlDocument. 验证(...)

XSLT/慕尼黑分组 : how to select element with certain sub-element from group?

excel - 使用合并的单元格对行进行排序