我有一个xml如下,
<doc>
<p> first sentence</p>
<p>second sentence</p>
<p> third sentence</p>
</doc>
我需要在<p>
节点中启动文本之前计算空格数(空格)。
所以在上面的例子中,应该返回2,0,10。
我可以使用count()函数来获取计数并使用tokenize()分隔空白字符串,但我的问题是写一个正则表达式来获得所需的空格。如何编写正则表达式来获取这些空格?
答案 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>