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

在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,'&amp;','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, '&amp;')">
          <xsl:value-of select="substring-before($text, '&amp;')"/>
          <xsl:text>and</xsl:text>
          <xsl:call-template name="replace-amp">
            <xsl:with-param name="text" select="substring-after($text, '&amp;')"/>
          </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()的第二个参数'&amp;'在XSLT属性中会被解析为字符&,实际是匹配节点值中的&字符,这部分逻辑是正确的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:15:35