因为您需要使用文本节点,所以使用“substring-before”来拆分字符串。这个例子有效:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="VALUE">
<xsl:call-template name="replace">
<xsl:with-param name="txt">
<xsl:value-of select="."/>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="replace">
<xsl:param name="txt"/>
<xsl:if test="not(contains($txt,'||'))">
<xsl:value-of select="$txt"/>
</xsl:if>
<xsl:if test="contains($txt,'||')">
<xsl:value-of select="substring-before($txt,'||')"/>
<hr/>
<xsl:call-template name="replace">
<xsl:with-param name="txt">
<xsl:value-of select="substring-after($txt,'||')"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
它没有构建格式良好的 xml,但给出了这个想法。我使用 <hr/> 来显示新行。在此处插入适合您需要的代码。
怎么了?当 XSLT 脚本到达包含要拆分的文本的元素时,它调用命名模板并将文本作为参数发送。
命名模板检查参数是否包含拆分标记。如果不是,则使用文本不变。如果是这样,则使用拆分标记之前的文本,并将之后的文本再次提供给命名模板(递归)。