如何修剪结果字符串值


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

上面的行返回IP地址192.123.201.21但我希望输出192.123.201。如何在.处拆分字符串并删除最后一个令牌?

在 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)" />

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>

此模板不断写出分隔符之间的段,直到到达不再有分隔符字符串实例的点。 您可以通过将xsl:value-of元素替换为

<xsl:call-template name="substring-before-last">
  <xsl:with-param name="str" select="IPADDRESS" />
  <xsl:with-param name="separator" select="'.'" /><!-- note the single quotes -->
</xsl:call-template>

使用 XSLT 2.0 您可以使用 <xsl:value-of select="tokenize(IPADDRESS, '.')[position() lt last()]" separator="."/>

这应该有效(参考您的标题:"如何修剪结果字符串值?

<xsl:value-of select="substring(IPADDRESS,1,11)" />

你能依靠IPADDRESS元素始终具有相同的结构和内容吗?如果是这样,则无需标记化。

相关内容

  • 没有找到相关文章

最新更新