在某些情况下,我需要计算特定节点中的单词数。考虑以下xml文档。
<root>
<mainNode>
<book>
<price> 100 </price>
<city> chennai </city>
<list>
<language> c java ruby </language>
</list>
</book>
<book>
<price> 200 </price>
<city> banglore </city>
<list>
<language> c java </language>
</list>
<list>
<language> c++ java </language>
</list>
<list>
<language> pascal java </language>
</list>
</book>
<book>
<price> 300 </price>
<city> delhi </city>
<list>
<language> java ruby </language>
</list>
</book>
</mainNode>
</root>在上面的文档中,我需要计算“语言”节点中的语言数量。
输出,如计数::11
我怎么弄到这个?
发布于 2011-07-20 10:39:24
在您的示例中,所有语言都在文本中填充空格。
<language> c java ruby </language> 您是否可以假设情况总是这样,或者您会得到像这样的语言元素?
<language>c java ruby</language> 在本例中,将所有语言元素连接在一起将产生如下字符串,其中显示七个单词。
c java rubyc javac++ javapascal javajava ruby为了处理这种情况,您可能需要匹配language元素,并返回一个字符串,该字符串后面总是有一个空格。
试试这个XSLT..。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="languagelist">
<xsl:apply-templates select="//language"/>
</xsl:variable>
<!-- Count the number of words by counting the number of spaces -->
Count:<xsl:value-of select="string-length($languagelist) - string-length(translate($languagelist, ' ', ''))" />
</xsl:template>
<!-- Return the normalised string with one space at the end -->
<xsl:template match="language">
<xsl:value-of select="concat(normalize-space(.), ' ')" />
</xsl:template>
</xsl:stylesheet>注意,计算单词数的方法是比较规范化字符串的长度(用单个空格)和没有空格的字符串的长度。(即计算空格数)
https://stackoverflow.com/questions/6759298
复制相似问题