2009-09-02 6 views
0

J'écris une feuille de style en xsl (version 2.0) Je veux savoir comment pourrais-je compter tous les nœuds avec un nom spécifique bien qu'ils ne soient pas frères pour exemple dans le xml suivant je veux compter les nombres de produits de type -Milk mais de tous les magasins. Je veux savoir s'il existe un moyen d'utiliser la fonction count et ne pas avoir de problèmes avec la récursivité. résultat devrait être 4 pour cet exempleComment compter des nœuds spécifiques dans xml hierachy dépend de la condition dans 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> 

Répondre

4

Ceci évite l'opérateur lent "//".

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

Merci Il fonctionne très bien comment le comte un peu (// ne donne pas le résultat escompté. Si je veux compter précédent Produits de tous les commerces (frères et sœurs et cousins) ce serait une bonne façon de compter que ? – sofr

+0

'count (précédant :: Product [type = 'Milk'])'. Consultez http://infohost.nmt.edu/tcc/help/pubs/xslt/axis-sect.html et le langage XPath spec http://www.w3.org/TR/xpath – Tomalak

+0

PS: Il n'est pas non plus strictement nécessaire d'accepter une réponse dans 100% de vos questions, mais les réponses qui ont effectivement * résolu votre problème * devraient être acceptées à un moment donné . – Tomalak

2

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

// trouve tous les nœuds correspondant partout dans le document.

Questions connexes