我正在创建一个左侧修剪模板,我在下面有模板:
<xsl:template name="str:left-trim">
<xsl:param name="string" select="''"/>
<xsl:variable name="tmp" select="substring($string, 1, 1)"/>
<xsl:if test="$tmp = ' '">
<xsl:variable name="tmp2" select="substring-after($string, $tmp)"/>
<xsl:choose>
<xsl:when test="$tmp2 != ''">
<xsl:call-template name="str:left-trim">
<xsl:with-param name="string" select="$tmp2"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$tmp2"/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test="$tmp != ' '">
<xsl:value-of select="$string"/>
</xsl:if>
</xsl:template>
如果我传递这样的论点:
<xsl:variable name="str-test2">this is a america</xsl:variable>
然后我的模板就可以正常工作但是如果我在下面传递这样的参数,那么我的模板将失败。我认为休息时间有问题(换行符)
<xsl:variable name="str-test2">
this is a america
</xsl:variable>
你有什么建议吗?
答案 0 :(得分:4)
这对我有用。注意我没有使用str:namespace加上我正在检查引导换行符。
<xsl:template name="left-trim">
<xsl:param name="string" select="''"/>
<xsl:variable name="tmp" select="substring($string, 1, 1)"/>
<xsl:choose>
<xsl:when test="$tmp = ' ' or $tmp = '
'">
<xsl:call-template name="left-trim">
<xsl:with-param name="string" select="substring-after($string, $tmp)"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
HTH,Axel。
答案 1 :(得分:2)
这是一个在不使用递归模板的情况下在XSLT 1.0中左键修剪字符串的解决方案:
<xsl:value-of select="substring($str-test2, string-length(substring-before($str-test2, substring(normalize-space($str-test2), 1, 1))) + 1)"/>