在XSLT中如何将XML里的&符号替换为and?
XSLT替换XML中的&为英文and的实现
需求:将XML中所有特殊字符&替换为英文单词and。
尝试的写法
<xsl:element name="ext_udf_str1"> <xsl:value-of select="replace(/*:SyncCLShipment/*:DataArea/*:CLShipment/*:Shipment/*:ShipmentHeader/*:PickMsgLine1,'&','and')"/> </xsl:element>
注意事项与优化建议
- 确保你的XSLT处理器支持XSLT 2.0及以上版本,因为
replace()函数是XSLT 2.0新增功能。如果使用XSLT 1.0,需通过递归模板实现替换:<xsl:template name="replace-amp"> <xsl:param name="text"/> <xsl:choose> <xsl:when test="contains($text, '&')"> <xsl:value-of select="substring-before($text, '&')"/> <xsl:text>and</xsl:text> <xsl:call-template name="replace-amp"> <xsl:with-param name="text" select="substring-after($text, '&')"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$text"/> </xsl:otherwise> </xsl:choose> </xsl:template> <!-- 模板调用示例 --> <xsl:element name="ext_udf_str1"> <xsl:call-template name="replace-amp"> <xsl:with-param name="text" select="/*:SyncCLShipment/*:DataArea/*:CLShipment/*:Shipment/*:ShipmentHeader/*:PickMsgLine1"/> </xsl:call-template> </xsl:element> - 原写法中
/*:前缀用于匹配任意命名空间的节点,若XML有明确命名空间,建议在XSLT中通过xmlns:绑定对应命名空间,使用带前缀的节点路径更严谨。 - 原代码中
replace()的第二个参数'&'在XSLT属性中会被解析为字符&,实际是匹配节点值中的&字符,这部分逻辑是正确的。
内容的提问来源于stack exchange,提问作者DHANU RACHURI
相关产品推荐
相关产品推荐

