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

XSLT 2.0使用replace函数替换字符串为XML结构的问题

XSLT 2.0拆分字符串生成多个XML节点的解决方案

你当前的写法无法生效的核心原因是:replace()是纯字符串处理函数,返回值始终为文本类型,即便你在替换规则中写了标签语法,最终也会被当成普通文本转义输出,无法被解析为XML节点;同时XSLT语法不允许在select属性的表达式内直接使用未转义的尖括号,语法本身就不合法。

正确实现方案

核心逻辑是:先拆分出需要的文本片段,再通过XSLT元素语法手动构造目标XML节点。

方案1:使用tokenize拆分(更简洁)

tokenize可以按指定正则拆分字符串,第三个参数可指定最大拆分次数,刚好适配你的需求:

<!-- 匹配原content节点 -->
<xsl:template match="content">
  <!-- 按第一个出现的空格拆分字符串为2段 -->
  <xsl:variable name="splitParts" select="tokenize(., '\s+', 2)"/>
  <!-- 分别构造两个content节点填入对应内容 -->
  <content><xsl:value-of select="$splitParts[1]"/></content>
  <content><xsl:value-of select="$splitParts[2]"/></content>
</xsl:template>

方案2:使用replace分别提取内容

如果你更习惯用replace函数,也可以分两次提取对应片段:

<xsl:template match="content">
  <xsl:variable name="firstPart" select="replace(., '(.*:)\s+(.*)', '$1')"/>
  <xsl:variable name="secondPart" select="replace(., '(.*:)\s+(.*)', '$2')"/>
  <content><xsl:value-of select="$firstPart"/></content>
  <content><xsl:value-of select="$secondPart"/></content>
</xsl:template>

两种方案最终输出的都将是符合要求的XML节点结构,不会出现标签转义的问题。如果需要适配更复杂的拆分规则,只需要调整对应正则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:12:01