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

如何在XSLT转换XML时保留注释内元素并完成指定节点转换?

XSLT转换实现:保留注释并重命名元素

当然可以在XSLT转换中保留注释内的元素,核心是显式处理注释节点,同时完成目标元素的重命名。以下是针对你需求的具体实现方案:

完整XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 去除多余空白,让输出更整洁 -->
    <xsl:strip-space elements="*"/>
    <!-- 保留目标元素内的文本空格 -->
    <xsl:preserve-space elements="newNote"/>

    <!-- 身份转换模板:默认复制所有未被专门匹配的节点/属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配注释节点,原样输出 -->
    <xsl:template match="comment()">
        <xsl:copy-of select="."/>
    </xsl:template>

    <!-- 将div元素重命名为newDiv -->
    <xsl:template match="div">
        <newDiv>
            <xsl:apply-templates select="@*|node()"/>
        </newDiv>
    </xsl:template>

    <!-- 将note元素重命名为newNote,并修改文本内容 -->
    <xsl:template match="note">
        <newNote>
            <!-- 替换Hello为Hallo,若需动态处理可调整逻辑 -->
            <xsl:value-of select="translate(., 'Hello', 'Hallo')"/>
        </newNote>
    </xsl:template>
</xsl:stylesheet>

代码说明

  • 身份转换模板:作为基础规则,确保所有未被自定义模板匹配的节点(比如注释外的其他潜在元素、属性)都被原样复制,保证转换的完整性。
  • 注释节点处理:专门匹配comment()节点,直接复制输出,这样注释内的<rs>元素会被完整保留。
  • 元素重命名:分别为div和note编写模板,替换为目标标签newDiv和newNote,同时通过xsl:apply-templates处理它们的子节点(包括注释和文本)。
  • 文本替换:通过translate()函数将Hello替换为Hallo,如果你的需求是固定修改该文本,这个逻辑完全适用;如果是其他文本处理需求,可调整此部分代码。

测试验证

将你提供的输入XML应用上述XSLT转换后,会得到如下输出:

<newDiv>
  <!-- <rs type=”bible”>Mos 1</rs> --><newNote>Hallo World</newNote>
</newDiv>

完全符合你的目标结构要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:55:07