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

XSLT如何根据元素属性值修改对应元素的文本内容

问题原因

你当前自定义模板的匹配对象是@attribute,即所有名为attribute的属性节点,因此逻辑只会修改属性值,不会改动元素的文本内容,和预期目标完全错位。

修正方案

保留原有的身份复制模板(保证其余节点原样输出),删除原有匹配@attribute的错误模板,新增一条匹配规则:定位所有携带attribute="Delete"属性的元素的直接文本子节点,将这类文本替换为REMOVED即可。
注意示例中<Entry2 attribute="Delete"/>这类空元素本身没有文本子节点,不会被规则命中,属性会原样保留,刚好符合输出要求。

修正后完整XSLT代码
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- 通用身份复制模板:无特殊规则的节点全部原样输出 -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<!-- 替换带attribute="Delete"属性元素的文本内容 -->
<xsl:template match="*[@attribute='Delete']/text()">
    <xsl:text>REMOVED</xsl:text>
</xsl:template>

</xsl:stylesheet>
执行效果

运行上述代码后输出结果和预期完全一致:

  • 所有attribute属性的值不会被修改,保留原有Delete/Update取值
  • 携带attribute="Delete"且包含文本内容的元素,内部文本统一替换为REMOVED
  • 携带attribute="Update"属性的元素不受任何影响,内容保持原样
  • 空元素(如<Entry2 attribute="Delete"/>)无文本子节点,不会被改动,结构和属性完全保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:12:28