recuperer toutes les valeurs d'un meme type de noeud

recuperer toutes les valeurs d'un meme type de noeud - XML/XSL - Programmation

Marsh Posté le 19-03-2007 à 15:01:12    

Bonjour bonsoir,
 
J'ai un xml qui a la gueule suivante:
 

<parent>
  <typeA>val 1</typeA>
  <typeC>val 2</typeC>
  <typeA>val 3</typeA>
  <typeB>val 4</typeB>
  <typeA>val 5</typeA>
  <typeC>val 6</typeC>
</parent>


 
Et au final, je devrais arriver a un truc qui aurrait la forme suivante:
 
typeA(3): val 1, val 3, val 5
typeB(1): val 4
typeC(2): val 2, val 6
 
le tout en xslt 1 (en 2, ce serait trop facile :o ) et en ne sachant pas a l'avance combien de type de noeud fils je pourrait avoir, ni leurs noms.
 
Quelqu'un aurait une idee? parce que la, je seche un peu... :??:

Reply

Marsh Posté le 19-03-2007 à 15:01:12   

Reply

Marsh Posté le 21-03-2007 à 10:25:15    

:sweat:

Reply

Marsh Posté le 21-03-2007 à 15:54:28    

tu charges ton xml dans un dataset .NET et tu fais un regroupement, avant de faire un export en XML puis une transformation xslt du résultat :D

Reply

Marsh Posté le 21-03-2007 à 16:09:05    

super, vla l'expert qui rapplique [:kiki]

Reply

Marsh Posté le 21-03-2007 à 16:09:48    

c'est comme ça que tu me remercies de faire un up à ton topic tout pourri ? :o

Reply

Marsh Posté le 21-03-2007 à 16:12:57    

pour info, ce que tu cherches à faire n'est pas conforme à la norme de toute façon.
 
un xslt, c'est fait pour transformer un fichier xml. un fichier xml, par définition, son schéma est connu, donc "ni leurs noms" n'a pas lieu d'être.
 
si tu dois transformer des fichiers xml dont la dtd peut varier, alors t'as qu'à faire varier de la même façon ton xslt :spamafote:
 
une fois de plus, structure et informations sont confondus, ça change pas des topics sgbd. finalement, je trouve mes repères ici.

Reply

Marsh Posté le 21-03-2007 à 16:15:35    

MagicBuzz a écrit :


un xslt, c'est fait pour transformer un fichier xml. un fichier xml,


 
c'est nouveau ça ...

Reply

Marsh Posté le 21-03-2007 à 16:24:12    

tu peux faire un SORT en XSLT pour trier déja, de mémoire ça doit donner un truc du genre (mais ça fait un moment que j'ai pas touché a XSLT)
 

Code :
  1. <xsl:template name="distinct">
  2. <xsl:for-each select="//parent//child()">
  3.      <xsl:sort select="name()" />
  4.   </xsl:for-each>
  5. </xsl:template>

Reply

Marsh Posté le 22-03-2007 à 09:02:18    

MagicBuzz a écrit :

pour info, ce que tu cherches à faire n'est pas conforme à la norme de toute façon.
 
un xslt, c'est fait pour transformer un fichier xml. un fichier xml, par définition, son schéma est connu, donc "ni leurs noms" n'a pas lieu d'être.
 
si tu dois transformer des fichiers xml dont la dtd peut varier, alors t'as qu'à faire varier de la même façon ton xslt :spamafote:
 
une fois de plus, structure et informations sont confondus, ça change pas des topics sgbd. finalement, je trouve mes repères ici.


En effet, ca ne change pas des topics sgdb, tu parles toujours de ce que tu ne connais pas...

Reply

Marsh Posté le 22-03-2007 à 09:02:54    

nemohp a écrit :

tu peux faire un SORT en XSLT pour trier déja, de mémoire ça doit donner un truc du genre (mais ça fait un moment que j'ai pas touché a XSLT)
 

Code :
  1. <xsl:template name="distinct">
  2. <xsl:for-each select="//parent//child()">
  3.      <xsl:sort select="name()" />
  4.   </xsl:for-each>
  5. </xsl:template>



Ca oui, je sais.  
Le probleme, c'est qu'apres, je ne vois aucun moyen de savoir combien de noeud de chaque type j'ai. En xslt2, j'ai le for-each-group qui me permet de faire un traitement super simplement, mais en 1.1, je ne vois pas du tout.

Reply

Marsh Posté le 22-03-2007 à 09:02:54   

Reply

Marsh Posté le 22-03-2007 à 14:06:38    

<xsl:value-of select="count(NomDeTonNoeud)" /> ça marche pas en xslt 1?

Reply

Marsh Posté le 22-03-2007 à 14:30:29    

si, ca marche, mais uniquement quand je connais "NomDeTonNoeud" [:gizmo]

Reply

Marsh Posté le 22-03-2007 à 15:14:50    

Il me semble que si, tu peux le connaitre le nom du noeud via name()
Je pense qu'en combinant dans la boucle le tri sur name(), le count(name()) et un test when pour afficher qu'une fois le count() et les valeurs (le test étant du style "nom noeud courant == nom noeud précédent" ), ça devrait le faire, non?

Reply

Marsh Posté le 22-03-2007 à 16:06:54    

euh, peut-etre, en effet, je vais tester ca :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed