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

如何使用XSLT 1.0移除XML属性及文本中的所有连字符

问题原因

你编写的XSLT无法生效,核心是匹配根节点/的模板优先级高于通用节点复制模板,执行时会直接将整个文档的所有文本内容拼接后做替换,完全丢弃原XML的结构。

正确实现代码

以下XSLT 1.0代码可以完全保留原XML结构,仅移除所有属性值、文本内容中的连字符:

<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="*|processing-instruction()|comment()">
      <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
    </xsl:template>

    <!-- 处理属性节点:移除属性值中的连字符 -->
    <xsl:template match="@*">
        <xsl:attribute name="{name()}">
            <xsl:value-of select="translate(., '-', '')"/>
        </xsl:attribute>
    </xsl:template>

    <!-- 处理文本节点:移除文本内容中的连字符 -->
    <xsl:template match="text()">
        <xsl:value-of select="translate(., '-', '')"/>
    </xsl:template>
    
</xsl:stylesheet>
代码说明
  • 删除了原有代码中匹配根节点/的模板,避免破坏结构复制逻辑
  • 将原通用匹配模板拆分,单独对属性、文本节点做替换处理:用translate()函数将节点值中的所有-替换为空字符串,其余节点完整复制
  • 修正了原有translate()函数的参数问题:你原代码中写的translate(.,'- ','')会同时移除连字符和空格,和你给出的预期输出不符,上述代码仅移除连字符,输出结果和你给出的示例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:15:38