使用xsl计算特定xml节点中的单词数

时间:2011-07-20 08:51:45

标签: xml xslt xpath

在某些情况下,我需要计算特定节点中的单词数。    请考虑以下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

我如何得到这个?

1 个答案:

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

请注意,计算单词数的方法是将规范化字符串(单个空格)的长度与不带空格的字符串长度进行比较。 (即计算空格数)