如何修剪结果字符串值?

时间:2014-01-13 09:54:20

标签: xslt xslt-1.0

<xsl:value-of select="IPADDRESS" />

以上行返回IP地址192.123.201.21,但我希望输出为192.123.201。如何在.分割字符串并删除最后一个标记?

4 个答案:

答案 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-beforesubstring-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="."/>