计算文本节点的尾随空格数

时间:2014-05-23 09:06:18

标签: xslt xslt-1.0 xslt-2.0

我想获取文本节点中的尾随字符数。我想到了以下几点:

string-length(substring-after(.,substring(normalize-space(.), string-length(normalize-space(.)),1)))

,例如,最后一个字符后的子字符串的长度。

除此之外,它不起作用,因为substring-after返回第一个子字符串匹配。例如,substring-after('mississippi','i')将返回'ssissippi'。我也无法匹配整个规范化的字符串,因为它可能包含已移除的双空格,substring-after将不再匹配。

有没有办法获取字符串中的尾随空格数?

1 个答案:

答案 0 :(得分:1)

使用analyze-string

<xsl:template match="text()">
  <xsl:analyze-string select="." regex="(\s*)$">
    <xsl:matching-substring>
      <xsl:sequence select="string-length(regex-group(1))"/>
    </xsl:matching-substring>
  </xsl:analyze-string>
</xsl:template>

当然,不是编写匹配文本节点的模板,而是编写一个带字符串的函数,然后按照我的建议进行操作

<xsl:function name="mf:count" as="xs:integer">
  <xsl:param name="input" as="xs:string"/>
      <xsl:analyze-string select="$input" regex="(\s*)$">
        <xsl:matching-substring>
          <xsl:sequence select="string-length(regex-group(1))"/>
        </xsl:matching-substring>
      </xsl:analyze-string>
</xsl:function>