在某些情况下,我需要计算特定节点中的单词数。 请考虑以下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>
在上面的文档中,我需要计算“语言”节点中的语言数量。
输出如 Count :: 11
我如何得到这个?
答案 0 :(得分:1)
在您的示例中,所有语言都在文本
中填充空格<language> c java ruby </language>
你能否认为情况总是如此,或者你会得到语言这样的元素吗?
<language>c java ruby</language>
在这种情况下,连接所有语言元素会产生这样的字符串,显示七个单词
c java rubyc javac++ javapascal javajava ruby
为了应对这种情况,您可能需要匹配语言元素,并返回一个后跟空格的字符串。
试试这个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>
请注意,计算单词数的方法是将规范化字符串(单个空格)的长度与不带空格的字符串长度进行比较。 (即计算空格数)