2009-09-02 4 views
0

xsl(バージョン2.0)でスタイルシートを書いています兄弟ではありませんが特定の名前のすべてのノードをどのように数えることができるか知りたいのですが 次のXMLの例私はタイプ-Milkからすべての店舗の商品数を数えたいと思う。 カウント関数を使用し、再帰で苦労していないかどうかを知りたいです。 結果は、この例の4xml hierachyの特定のノードを数える方法はXSLの条件によります

<Shops><Shop> 
<Product> 
    <Name>yogurt</Name> 
    <type>Milk</type> 
</Product> 
<Product> 
    <Name>cheese</Name> 
    <type>Milk</type> 
</Product> 
<Product> 
    <Name>bread</Name> 
    <type>Bakery</type> 
</Product> </Shop> <Shop> 
<Product> 
    <Name>yellow cheese</Name> 
    <type>Milk</type> 
</Product> 
<Product> 
    <Name>chocolate milk</Name> 
    <type>Milk</type> 
</Product> 
<Product> 
    <Name>bagel</Name> 
    <type>Bakery</type> 
</Product> 
<Product> 
    <Name>candy</Name> 
    <type>Sweets</type> 
</Product> </Shop></Shops> 

答えて

4

これにより、遅い "//"演算子が回避されます。それが正常に動作します

 
count(/Shops/Shop/Product[type = 'Milk']) 
+0

おかげで、いくつかのカウント(//が期待される結果を与えるものではありませんか。 を私はすべてのお店というカウントするための正しい方法であるもの(兄弟やいとこ)から製品を前のカウントするようにしたい場合? – sofr

+0

'count(preceding :: Product [type = 'Milk'])'。http://infohost.nmt.edu/tcc/help/pubs/xslt/axis-sect.htmlとXPath言語を参照してください。 spec http://www.w3.org/TR/xpath – Tomalak

+0

PS:あなたの質問の100%で回答を受け入れることも厳密には要求されていませんが、実際に*あなたの問題を解決した* 。 – Tomalak

2

count(//Product[type='Milk'])

//なければならないどこにでもドキュメント内のすべての一致するノードを見つけます。

関連する問題