2010-07-12 5 views
1

je le code XML suivant:noeuds XML Count en utilisant XSLT mais à l'exclusion de certains noeuds

<assessment> 
    <section> 
     <item name="Item1"/> 
     <item name="Item2"/> 
     <item name="Item3"> 
      <attributes> 
       <item_references> 
        <item_reference> 
         <attributes> 
          <item name="Item3.1"> 
           <item name="Item3.1.1"/> 
          </item> 
         </attributes> 
        </item_reference> 
       </item_references> 
      </attributes> 
     </item> 
    </section> 
</assessment> 

En utilisant XSLT, je veux compter le nombre d'articles, mais pas compter ces éléments qui sont imbriqués dans les éléments. Dans ce cas, je veux compter l'élément 1, l'élément 2 et l'élément 3, mais pas le point 3.1 ou le point 3.1.1. Donc, dans ce cas, la réponse devrait être 3 (et non 5).

J'ai le code suivant qui compte les éléments, mais ne laisse pas les éléments imbriqués:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:template match="assessment"> 
     <xsl:value-of select="count(.//item)"/> 
    </xsl:template> 
</xsl:stylesheet> 

Comment puis-je modifier ce code pour exclure les éléments imbriqués?

+0

vous avez accepté une réponse inefficace. Lire mon message –

Répondre

2

Essayez ceci.

count (.// point [non (ancêtre :: item)])

+0

Ne recommandez pas l'axe descendant lorsque ce n'est pas vraiment nécessaire. De plus, si vous êtes père, vous connaissez vos fils. –

0

Après votre feuille de style, ce

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 
    <xsl:template match="assessment"> 
     <xsl:value-of select="count(*/item)"/> 
    </xsl:template> 
</xsl:stylesheet> 

Résultat:

3 

Remarque: Vous pourrait également correspondre à section élément. Évitez l'axe descendant lorsque cela est possible.

Questions connexes