如何在XSLT 3中为非7HH开头的元素值添加7HH前缀?
给XML元素值添加指定前缀的解决方案
需求:当XML中<Name>元素的文本值不以7HH开头时,为其添加7HH前缀。
源XML
<DATA> <Name>90078</Name> </DATA>
实现方案(使用XSLT)
可以用XSLT的条件判断和字符串处理函数实现需求,以下是XSLT 1.0的实现代码:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 复制所有节点和属性,保证原有XML结构不变 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 专门处理Name元素 --> <xsl:template match="Name"> <Name> <xsl:choose> <!-- 判断文本是否以7HH开头 --> <xsl:when test="starts-with(., '7HH')"> <xsl:value-of select="."/> </xsl:when> <xsl:otherwise> <xsl:value-of select="concat('7HH', .)"/> </xsl:otherwise> </xsl:choose> </Name> </xsl:template> </xsl:stylesheet>
转换后结果
<DATA> <Name>7HH90078</Name> </DATA>
逻辑说明
- 第一个模板是身份模板,负责原样复制XML中除
<Name>外的所有节点和属性,确保XML整体结构不受影响。 - 第二个模板精准匹配
<Name>元素:- 用
starts-with(., '7HH')判断当前元素文本是否以7HH开头 - 符合条件则直接输出原文本;不符合则通过
concat函数拼接前缀后输出
- 用
内容的提问来源于stack exchange,提问作者AnirD
相关产品推荐
相关产品推荐

