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

如何使用XSLT处理两个XML文件合并生成含指定属性的TEI结构XML

实现思路

  • 以结构完整的第一个XML作为转换的主输入
  • 将带属性的第二个XML作为辅助文件加载到XSLT中
  • 按节点顺序一一匹配两个文件中的<TEI>节点,将第二个文件中<TEI>的xmlns、xml:id属性复制到对应第一个文件的<TEI>节点上
  • 第一个文件中所有<TEI>下的子节点和内容完整保留,不做修改

完整XSLT示例

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:tei="http://www.tei-c.org/ns/1.0"
    exclude-result-prefixes="tei">

    <!-- 配置第二个带属性的XML文件路径,转换时也可通过外部参数传入 -->
    <xsl:param name="attrSourcePath" select="'你的第二个文件路径.xml'"/>
    <!-- 加载第二个文件的内容 -->
    <xsl:variable name="attrSource" select="doc($attrSourcePath)"/>

    <!-- 身份模板:默认复制所有节点和属性 -->
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配第一个文件中的TEI节点,替换属性 -->
    <xsl:template match="TEI">
        <!-- 获取当前TEI的位置索引(从1开始计数) -->
        <xsl:variable name="pos" select="position()"/>
        <!-- 匹配第二个文件中对应位置的TEI节点 -->
        <xsl:variable name="targetTei" select="$attrSource/root/tei:TEI[$pos]"/>
        <!-- 复制目标TEI的所有属性(包含xmlns和xml:id) -->
        <xsl:copy select="$targetTei">
            <xsl:copy-of select="$targetTei/@*"/>
            <!-- 保留当前TEI下的所有子节点内容 -->
            <xsl:apply-templates select="node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

使用说明

  1. 执行XSLT转换时,主输入文件选择结构完整的第一个XML
  2. 可直接修改代码中attrSourcePath参数的值为第二个XML的本地路径,也可在转换时通过外部参数传入该路径
  3. 输出结果即为合并后的XML,所有<TEI>节点都带有对应xmlns和xml:id属性,原有子节点完全保留

注意:该方案默认两个文件的<TEI>节点按顺序一一对应,即第一个文件的第N个<TEI>对应第二个文件的第N个<TEI>,如果匹配逻辑不同可自行调整模板中的匹配规则。

内容的提问来源于stack exchange,提问作者Becky B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:15:03