【问题标题】:Count the number of trailing spaces of a text node计算文本节点的尾随空格数
【发布时间】:2014-05-23 09:06:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我认为除了递归模板之外这是不可能的(在 XSLT 1.0 中)。您可以选择遍历尾随空格或规范化字符串中最后两个字符的出现(取决于您期望较少的字符)。另请注意,“空格”与“空白字符”不同。

标签: xslt xslt-1.0 xslt-2.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>

【讨论】:

  • 我会将我的 XSLT 版本从 1.0 升级到 2.0。 ;) 谢谢。
  • 哦,我的处理器不支持 XSLT 2.0。 :
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 2015-11-11
相关资源
最近更新 更多