You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并多个XML并为合并后的XML编写对应的XSLT样式表

合并多个XML及适配XSLT实现方案

1 合并后XML的标准结构

将多个XML的<catalog>节点统一放到自定义顶层根节点下即可完成合并,可给每个<catalog>添加source属性标识来源,方便后续XSLT处理,支持任意数量XML扩展:

<?xml version="1.0" encoding="UTF-8"?>
<mergedCatalogs>
  <catalog source="XML-1">
    <cd>
      <title>Empire Burlesque</title>
      <artist>Bob Dylan</artist>
    </cd>
  </catalog>
  <catalog source="XML-2">
    <cd>
      <title>Empire Burlesque-1</title>
      <artist>Bob Dylan-1</artist>
    </cd>
  </catalog>
</mergedCatalogs>

2 适配合并后XML的XSLT代码

调整原XSLT的节点匹配路径,自动适配多XML列展示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html> 
<body>
  <h2>My CD Collection</h2>
  <table border="1">
    <!-- 表头自动生成所有XML来源列 -->
    <tr bgcolor="#9acd32">
      <th style="text-align:left">Details</th>
      <xsl:for-each select="mergedCatalogs/catalog">
        <th style="text-align:left"><xsl:value-of select="@source"/></th>
      </xsl:for-each>
    </tr>
    <!-- 标题行 -->
    <tr>
      <td>Title</td>
      <xsl:for-each select="mergedCatalogs/catalog/cd">
        <td><xsl:value-of select="title"/></td>
      </xsl:for-each>
    </tr>
    <!-- 艺术家行 -->
    <tr>
      <td>Artist</td>
      <xsl:for-each select="mergedCatalogs/catalog/cd">
        <td><xsl:value-of select="artist"/></td>
      </xsl:for-each>
    </tr>  
  </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

3 额外方案:无需提前合并XML的实现方式

如果不需要生成统一的合并XML文件,可直接在原单XML的XSLT中通过document()函数加载其他XML文件,适合XML文件独立存储的场景:

<!-- 示例:在XSLT中直接加载XML-2文件,路径替换为实际存储路径 -->
<xsl:variable name="xml2" select="document('xml2.xml')/catalog/cd" />

<!-- 取值示例 -->
<td><xsl:value-of select="$xml2/title"/></td>
<td><xsl:value-of select="$xml2/artist"/></td>

内容的提问来源于stack exchange,提问作者ANUJI VARGHESE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:00:02