2011-07-20 120 views
1

在某些情況下,我需要計算特定節點中單詞的數量。 考慮下面的xml文檔。使用xsl計算特定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

我如何獲得這個輸出是什麼?

回答

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> 

注意的方法來計算單詞的數量是沒有空格的字符串的長度比較標準化的字符串的長度(單空格)。 (即計算空格的數量)