XSLT - 使用正则表达式计算空格

时间:2015-08-05 08:40:28

标签: xml xslt xslt-2.0

我有一个xml如下,

<doc>
    <p>  first sentence</p>
    <p>second sentence</p>
    <p>          third sentence</p>
</doc>

我需要在<p>节点中启动文本之前计算空格数(空格)。 所以在上面的例子中,应该返回2,0,10。

我可以使用count()函数来获取计数并使用tokenize()分隔空白字符串,但我的问题是写一个正则表达式来获得所需的空格。如何编写正则表达式来获取这些空格?

2 个答案:

答案 0 :(得分:3)

  

我的问题是写一个正则表达式来获得所需的白色   空间。

正则表达式可能不是这里的最佳选择。试试这个单行:

<xsl:value-of select="string-length(substring-before(., substring(normalize-space(.), 1, 1)))" />

答案 1 :(得分:1)

如果您使用模式^ +,那么您将匹配字符串的开头加上非空的空格字符序列

<xsl:template match="p">
  <xsl:variable name="space-count" as="xs:integer">
    <xsl:analyze-string select="." regex="^ +">
      <xsl:matching-substring>
        <xsl:sequence select="string-length()"/>
      </xsl:matching-substring>
      <xsl:non-matching-substring>
        <xsl:sequence select="if (position() eq 1) then 0 else ()"/>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:variable>
  <xsl:value-of select="$space-count"/>
</xsl:template>