在我的一条xml消息中,我有一个特定的标签,其中一些(未知)的最后位置填充了特定字符(/)。但是在XSLT期间,我想删除这个字符,并在最后位置生成另一个字符串。
答案 0 :(得分:1)
您的问题非常模糊,但您可以创建一个身份转换,以递归方式复制每个元素,并为您要修改的元素添加特殊模板,例如
<xsl:template match="particular-tag">
<xsl:copy>
<xsl:value-of select="substring-before(., '/')"/>
</xsl:copy>
</xsl:template>
这将从每个<particular-tag>
元素中删除第一个斜杠中的所有字符。
答案 1 :(得分:0)
如果我正确理解了这个问题,你有一个字符串可能以零或多个斜杠结尾;你想要一个函数或模板从字符串中去除尾部斜杠 - 而不是其他斜杠。在XSLT 2.0中,最简单的方法是编写一个函数来执行此操作。编写函数的方法有很多种;一个简单的就是这个(它将问题概括为从字符串的末尾剥离任何给定的字符,而不仅仅是斜杠):
<xsl:function name="my:strip-trailing-char">
<xsl:param name="s" required="yes"/>
<xsl:param name="c" required="yes"/>
<xsl:choose>
<xsl:when test="ends-with($s,$c)">
<xsl:value-of select="my:strip-trailing-char(
substring($s,1,string-length($s) - 1),
$c
)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$s"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
在XSLT 1.0中,您可以使用命名模板执行相同的操作:
<xsl:template name="my:strip-trailing-char">
<xsl:param name="s" required="yes"/>
<xsl:param name="c" required="yes"/>
<xsl:choose>
<xsl:when test="ends-with($s,$c)">
<xsl:call-template name="my:strip-trailing-char">
<xsl:with-param name="s"
select="substring($s,1,string-length($s) - 1)"/>
<xsl:with-param name="c" select="$c"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$s"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>