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

XSLT - count whitespace using regular expression

我有一个 xml 如下,

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

<p> 节点中开始文本之前,我需要计算 space 的数量(白色 space)。 所以在上面的例子中 2,0,10 应该是 return.

我可以使用 count() 函数来获取计数并使用 tokenize() 分隔白色 space 字符串,但我的问题是编写一个正则表达式来获取所需的白色 space。我怎样才能写一个正则表达式来得到那些白色的 spaces?

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

<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>

my problem is write a regular expression to get the needed white space.

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

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