Problème d'écriture d'une transformation XSLT avec les boucles de conditions
Bonjour à tous,
Je voudrais savoir s'il y a quelqu'un qui peut m'aider à résoudre un problème d'écriture d'une boucle en XSLT, ma question est la suivante :
Comment je peux écrire une transformation XML vers TXT qui traitera le document XML afin de compter en son sein le nombre d’éléments
<Name> consécutifs qui ont la même valeur et d’afficher pour chacun des premiers de chaque série ce nombre, une tabulation et cette valeur
Le document XMl est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| <Document>
<Balise>
<Name>A</Name>
</Balise>
<Balise>
<Name>A</Name>
</Balise>
<Balise>
<Name>A</Name>
</Balise>
<Balise>
<Name>B</Name>
</Balise>
<Balise>
<Name>B</Name>
</Balise>
<Njoueur>
<Name>B</Name>
</Balise>
<Balise>
<Name>B</Name>
</Balise>
<Balise>
<Name>B<Name>
</Balise>
<Balise>
<Name>B</Name>
</Balise>
<Balise>
<Name>B</Name>
</Balise>
<Balise>
<Name>C</Name>
</Balise>
<Balise>
<Name>C</Name>
</Balise>
<Balise>
<Name>C</sName>
</Balise>
...
<Balise>
<Name>Z</Name>
</Balise>
...
<Document> |
et voici ce que j'ai pu écrire en XSLT :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="texte"/>
<xsl:template match="Balise">
<xsl:choose>
<xsl:when test="Name = not(preceding-sibling::Name)">
<xsl:value-of select="Name [position()=1]"/>
<xsl:value-of select="count(//Name [ position()='1'])"/>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet> |
Merci de votre réponse !
Cordialement,
des regroupements mais pas de comptage
J'ai essayé d'appliquer ce que tu m'as montré mais apparemment ça ne fonctionne pas puisque je n'ai pas le nombre de chacun des noms. Et surtout pas le résultat escompté.
Pour mieux expliqué ce que je veux comme résultat :
Dans mon document XML, je dois avoir une suite d'éléments <Name> dont les contenus sont des noms triés par ordre alphabétique :
<Document><Name>A</Name><Name>A</Name><Name>A</Name><Name>B</Name><Name>B</Name><Name>B</Name><Name>B</Name><Name>B</Name><Name>B</Name><Name>C</Name><Name>C</Name><Name>C</Name>...<Name>Y</Name><Name>Y</Name><Name>Z</Name><Document>
A partir de ce document XML je dois en générer un autre de type TXT dont le contenu sera :
A Tabulation 3
B Tabulation 6
C Tabulation
...
Y Tabulation 2
PS: Les numéro présentent le nombre de chaque nom.
Pour cela, quand je traite un <Name>, je dois chercher à savoir s'il a une valeur différente de celui qui le précède (il est alors le premier d'une série). Si c'est le cas, je vois afficher sa valeur puis compter combien d'éléments <Name> ont la même valeur que lui dans l'ensemble du document. Si ce n'est pas le cas (il est alors 2e, 3e, 4e, etc. d'une série) je ne dois rien faire.
Donc mon problème c'est que je n'arrive pas à transcrire le texte ci-dessous en écriture XSLT, et je pense qu'on a besoin de quelques boucles de conditions et surtout de la fontion count() pour compter le nombre total de chaque nom.
Bien cordialement,