Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
666 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Mettre en tableau des données entrelacées

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mettre en tableau des données entrelacées

n°1542231
Slyde
Wizard of the Coast
Posté le 12-04-2007 à 19:55:14  profilanswer
 

Bijour,
 
Je conçois un fichier .XSL pour mettre en forme et filtrer. Mon fichier source .XML a ce format,  :
 

+ <trsd:line.item>
 - <tred:line.item.number>1</tred:line.item.number>
+ <trsd:item.description>
+ <trsd:quantity>
  - <tred:quantity.qualifier code="A">
+ <trsd:quantity>
  - <tred:quantity.qualifier code="B">
+ <trsd:price.details>
 
+ <trsd:line.item>
 - <tred:line.item.number>2</tred:line.item.number>
+ <trsd:item.description>
+ <trsd:quantity>
  - <tred:quantity.qualifier code="A">
+ <trsd:quantity>
  - <tred:quantity.qualifier code="B">
+ <trsd:price.details>


 
Il est donc composé de X blocs avec le même nombre d'elements, mais qui malheureusement ne sont pas enfants, ils se suivent simplement consécutivement. Cela ne facilite pas du tout la tache. J'ai pas moyen de modifier la structure du XML source. Mon but, mettre dans un tableau ces valeurs.
 
Vu que la quantité de champs peut varier, je voudrais récuperer un tableau de variables avec des xsl:for-each de chaque element :
 

trsd:line.items[] = trsd:line.item0,trsd:line.item1,trsd:line.item2, etc
trsd:item.descriptions[] = trsd:item.description0, trsd:item.description1, trsd:item.description2, etc
tred:quantity.qualifiersA[] = tred:quantity.qualifierA0, tred:quantity.qualifierA1, tred:quantity.qualifierA2, etc
tred:quantity.qualifiersB[] = tred:quantity.qualifierB0, tred:quantity.qualifierB1, tred:quantity.qualifierB2, etc
trsd:price.detailss[] = trsd:price.details0, trsd:price.details1, trsd:price.details2, etc


 
 
Puis faire une boucle pour afficher un tableau qui reprend les éléments par bloc, un bloc par ligne :
 

<tr>
  <td>trsd:line.items[0]</td>
  <td>trsd:item.descriptions[0]</td>
  <td>tred:quantity.qualifiersA[0]</td>
  <td>tred:quantity.qualifiersB[0]</td>
  <td>trsd:price.detailss[0]</td>
</tr>
<tr>
  <td>trsd:line.items[0]</td>
  <td>trsd:item.descriptions[0]</td>
  <td>tred:quantity.qualifiersA[0]</td>
  <td>tred:quantity.qualifiersB[0]</td>
  <td>trsd:price.detailss[0]</td>
</tr>


Etc.
 
Je ne sais pas comment m'y prendre [:petrus75]
 
Ou s'il y a un moyen beaucoup plus simple, mais le fait que les elements ne soit pas hierarchisés me semble bloquer le parcours. Peut-être est-il possible de faire un parcours des noeuds d'un line.item à un autre avec des tests et une fonction de parcours de noeud ?
 
Bref, toute aide est la bienvenue.


---------------
Le topic du QLRR et FIRE - Knowledge is power. Power corrupts. Study hard, become evil.
mood
Publicité
Posté le 12-04-2007 à 19:55:14  profilanswer
 

n°1542280
Slyde
Wizard of the Coast
Posté le 12-04-2007 à 21:12:01  profilanswer
 

Je sens que ça va inspirer autant que mon aut' topic [:petrus75]


---------------
Le topic du QLRR et FIRE - Knowledge is power. Power corrupts. Study hard, become evil.
n°1542323
Slyde
Wizard of the Coast
Posté le 12-04-2007 à 23:42:36  profilanswer
 

J'ai une idée débile mais qui doit marcher, c'est balancer mes variables XSL dans un javascript (si ça marche ?), et generer le tableau HTML à partir de ce javascript.


---------------
Le topic du QLRR et FIRE - Knowledge is power. Power corrupts. Study hard, become evil.
n°1542336
Slyde
Wizard of the Coast
Posté le 13-04-2007 à 00:20:36  profilanswer
 

Bon, passer une variable XSL à javascript c'est encore plus l'angoisse [:ula]²²²²
 
Ptain, je suis une bille en boucles, doit y avoir un foutu moyen simple de faire ça quand même ? [:mlc2]


Message édité par Slyde le 13-04-2007 à 00:20:58

---------------
Le topic du QLRR et FIRE - Knowledge is power. Power corrupts. Study hard, become evil.
n°1542395
Profil sup​primé
Posté le 13-04-2007 à 09:56:20  answer
 

[:cosmoschtroumpf]

n°1567002
Ze Reaper
Posté le 30-05-2007 à 07:46:04  profilanswer
 

Je me permets d'upper ce topic un peu vieux pour essayer d'apporter quelques pistes :
 
Pour récupérer plusieurs variables contenant chacune un type de noeuds, c'est pas dur, c'est un bête select. Ensuite, pour faire le tableau, tu peux faire un for-each sur les trsd:line-item. Dans ce for-each, je pense que si tu fais un <xsl:value-of select="position()">, tu devrais récupérer l'"index" correspondant à chaque ligne. Ensuite, c'est facile de sélectionner ce qu'il faut dans les autres variables en utilisant cet index.
 
Une autre façon de faire serait de récupérer les infos ligne par ligne. Un petit exemple (dont la source est de l'XHTML) auquel j'avais pensé (pas testé par contre) pour récupérer tout ce qui se trouve entre un h2 bien précis (non compris) et le suivant (compris) :  

$SOTD/following::html:*[preceding::html:h2[1] is $SOTD]

$SOTD est la variable contenant le h2 en question. Cet XPath va donc récupérer tous les noeuds de même niveau qui suivent ce $SOTD et dont le premier noeud précédent   du même type que $SOTD (donc h2) est $SOTD lui-même. Ca fait que dès que dès que tu tombes sur le h2 suivant, les noeuds qui suivent auront pour premier preceding h2 ce nouvel h2, et donc ne seront plus sélectionnés.
Donc dans ton cas, je pense que tu dois pouvoir faire un truc du genre:


<xsl:for-each select="trsd:line.item">
  <xsl:variable name="current_line" select="."/>
  <xsl:variable name="columns" select="$current_line/following::trsd:*[preceding::trsd:line.item[1] is $current_line]"/>
  <!-- mise en forme de $columns -->
</xsl:for-each>


 
A noter qu'aucune de ces deux méthodes ne me semble terrible niveau complexité :-/.
 
Voilà, j'espère que ça pourra t'aider, bien qu'il doive sans doute exister d'autres manières plus propres et/ou efficaces (notamment avec les apply-templates que j'ai jamais pris le temps d'apprendre, la honte).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Mettre en tableau des données entrelacées

 

Sujets relatifs
Créer un trigger sur un schéma/user d'une base de données Transposer les données d'une Colonne MySql en plusieurs Colonnes
Problème d'affichage d'un tableau[JAVA] mettre en place un timeout pour l'écriture (write) sur socket
mettre une image sur une videoFormulaire: données
[JS DOM]Tableau créé en DOM, s'affiche sous FF, pas sous IE[Excel] Définir manuellement une plage de données
[Java] Récupération contenu textField avec un getacceler le parcour de mon tableau
Plus de sujets relatifs à : Mettre en tableau des données entrelacées


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR