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)))" />
我有一个 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)))" />