2011-07-20 19 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> 

、すべての言語要素が7つの言葉

c java rubyc javac++ javapascal javajava ruby 

は、このような状況に対処するために示しており、このような文字列につながる連結、あなたはおそらく言語に一致する必要があります。要素を返し、常にスペースが続く文字列を返します。

単語の数をカウントする方法は、スペースを含まない文字列の長さ(単一スペースで)正規化された文字列の長さを比較することである...

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

注このXSLTを試します。 (つまり、スペースの数を数えます)

関連する問題