如何使用XSLT移除XML属性值中的美元符号$
错误排查
你写的代码存在三个核心问题:
- 匹配路径语法错误:
match="/data/DWFOutput/FormsXML/print/ExportDocument/"末尾多了一个多余的斜杠,导致无法匹配到对应节点,你写的$替换逻辑全程没有执行 - 处理逻辑完全破坏原结构:就算路径写对了,你写的逻辑会直接把ExportDocument下的所有标签、其他属性全部丢弃,只输出dataElement的value处理后的纯文本,完全不符合你保留XML结构只改属性的需求
- 没有精准定位修改目标:你要改的是
dataElement节点的value属性,不需要修改上层节点的处理逻辑,只需要单独针对这个属性写替换规则即可
可用XSLT代码
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> <!-- 身份复制模板:所有不需要修改的内容原样复制 --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <!-- 精准匹配dataElement的value属性,移除$符号 --> <xsl:template match="dataElement/@value"> <xsl:attribute name="value"> <xsl:value-of select="translate(., '$', '')"/> </xsl:attribute> </xsl:template> </xsl:stylesheet>
效果说明
运行这段代码后,所有dataElement的value属性中的$符号都会被移除,其余XML结构、节点、属性全部保持不变,示例转换效果:
原属性:value="$Annual" → 处理后:value="Annual"
原属性:value="$ 2504" → 处理后:value=" 2504"
如果你需要同时去掉$后面的多余空格,可以把translate那一行替换为:<xsl:value-of select="normalize-space(translate(., '$', ''))"/>
内容的提问来源于stack exchange,提问作者Har D
相关产品推荐
相关产品推荐

