<xsl:value-of select="IPADDRESS" />
以上行返回IP地址192.123.201.21
,但我希望输出为192.123.201
。如何在.
分割字符串并删除最后一个标记?
答案 0 :(得分:2)
在XSLT 1.0中,您需要更加努力地工作:
<xsl:variable name="lastOctet" select="substring-after(substring-after(substring-after(IPADDRESS, '.'), '.'), '.')" />
<xsl:value-of select="substring(IPADDRESS, 1, string-length(IPADDRESS) - string-length($lastOctet) - 1)" />
答案 1 :(得分:1)
XPath 1.0 substring-before
和substring-after
函数可以在给定分隔符的第一次出现之前/之后给出子字符串,但是要在之前找到子字符串>最后出现你需要使用尾递归模板
<xsl:template name="substring-before-last">
<xsl:param name="str" />
<xsl:param name="separator" />
<xsl:param name="prefix" select="''" /><!-- first segment - no prefix -->
<xsl:variable name="after-first" select="substring-after($str, $separator)" />
<xsl:if test="$after-first">
<xsl:value-of select="concat($prefix, substring-before($str, $separator))" />
<xsl:call-template name="substring-before-last">
<xsl:with-param name="str" select="$after-first" />
<xsl:with-param name="separator" select="$separator" />
<!-- for second and subsequent segments, prepend a $separator -->
<xsl:with-param name="prefix" select="$separator" />
</xsl:call-template>
</xsl:if>
</xsl:template>
此模板不断在分隔符之间写出段,直到它到达不再有分隔符字符串实例的点。您可以通过将<{1}}元素替换为
来调用它xsl:value-of
答案 2 :(得分:0)
这应该有效(参考你的标题:“如何修剪结果字符串值?”):
<xsl:value-of select="substring(IPADDRESS,1,11)" />
您是否可以依赖IPADDRESS
元素来始终拥有相同的结构和内容?如果是这样,则无需标记化。
答案 3 :(得分:0)
使用XSLT 2.0,您可以使用<xsl:value-of select="tokenize(IPADDRESS, '\.')[position() lt last()]" separator="."/>
。