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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  XLS de débutant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

XLS de débutant

n°1620730
rodolpheg
Posté le 08-10-2007 à 21:28:44  profilanswer
 

Bonjour à tous,
 
J'ai trouvé votre forum en cherchant de l'aide pour l'élaboration de XLS.
J'ai une petite qui ne devrait pas être trop compliquée, mais qui me pose des problèmes.
Je voudrais transformer un xml de cette sorte :
 

Code :
  1. <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2007-10-03T16:34:07">
  2. <node>
  3. <Name>Boufin, Stan</Name>
  4. <Organization>University of Alberta</Organization>
  5. </node>
  6. <node>
  7. <Name>Cuming, Steve</Name>
  8. <Organization>Boreal Ecosystems Research Ltd</Organization>
  9. </node>
  10. ...
  11. </dataroot>


 
En ceci :
 

Code :
  1. <node id="1">
  2. <data key="name">Boufin, Stan</data>
  3. <data key="organization">University of Alberta</data>
  4. </node>
  5. <node id="2">
  6. <data key="name">Cuming, Steve</data>
  7. <data key="organization">Boreal Ecosystems Research Ltd</data>
  8. </node>
  9. ...


 
Voilà ce que j'ai fait et qui n'a pas l'air de fonctionner (pas d'incrémentation d'id, pour commencer)...
 

Code :
  1. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  2.     <xsl:template match="/">
  3.         <xsl:for-each select="dataroot/node">
  4.             <data key="name">
  5.             <xsl:value-of select="Name"/>
  6.             </data>
  7.         </xsl:for-each>
  8.         <xsl:for-each select="dataroot/node">
  9.             <data key="organisation">
  10.                 <xsl:value-of select="Organisation"/>
  11.             </data>
  12.         </xsl:for-each>
  13.     </xsl:template>
  14. </xsl:stylesheet>


 
Est-ce que quelqu'un a une idée de la manière de gérer ça ? Si oui, je suis preneur (merci !!!) ;)

mood
Publicité
Posté le 08-10-2007 à 21:28:44  profilanswer
 

n°1620733
TheRom_S
Posté le 08-10-2007 à 22:07:23  profilanswer
 

Salut, il faut que tu comprennes que tu peux voir ton XSL (pas XLS au passage) comme une sorte de template à quoi ressemblera le XML final. La différence avec d'autres templates tient du fait que les différentes parties du template sont découpées et stockées à la suite les unes des autres dans le fichier. Concrètement, ça veut dire que si pour chaque <node> du XML d'origine, tu veux traiter les deux éléments fils, il faudra le faire en même temps dans le for-each car ton XSL doit déjà être structuré comme la structure du XML final. Voilà ce qui devrait fonctionner (j'ai pas testé et j'ai ajouté une variable XSL pour gérer l'indexation) :

Code :
  1. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  2.   <xsl:param name="id" select="1" />
  3.   <xsl:template match="/">
  4.     <xsl:for-each select="dataroot/node">
  5.       <node id="$id">
  6.         <data key="name"><xsl:value-of select="Name"/></data>
  7.         <data key="organisation"><xsl:value-of select="Organisation"/></data>
  8.       </node>
  9.       <xsl:param name="id" select="$id+1" /><!-- à vérifier -->
  10.     </xsl:for-each>
  11.   </xsl:template>
  12. </xsl:stylesheet>


---------------
The Rom's, à votre service
n°1620739
rodolpheg
Posté le 08-10-2007 à 22:26:52  profilanswer
 

Merci TheRom !!!
Je comprends beaucoup mieux, mille merci !
Il semblerait que la ligne ajoutant 1 à la variable id ne fonctionne pas, voici ce que me dit le débuggeur :

 

"Description: xsl: param must be immediately within a template, function or stylesheet
Description: xsl: param must be the first element within a template"


Message édité par rodolpheg le 08-10-2007 à 22:27:43
n°1620763
TheRom_S
Posté le 08-10-2007 à 23:36:27  profilanswer
 

oui en fait on peut pas utiliser les params comme ça, c'est fait pour autre chose
ceci devrait marcher :

Code :
  1. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  2.   <xsl:template match="/">
  3.     <xsl:for-each select="dataroot/node">
  4.       <node id="../postition()">
  5.         <data key="name"><xsl:value-of select="Name"/></data>
  6.         <data key="organisation"><xsl:value-of select="Organisation"/></data>
  7.       </node>
  8.     </xsl:for-each>
  9.   </xsl:template>
  10. </xsl:stylesheet>

Je suis pas tellement sûr de la syntaxe et si j'ai mal compris la notion d'axz de recherche, il se pourrait que ça compte à l'envers ... Bref essaie de te documenter sur XPath, c'est ce qui t'aidera à faire ce genre de choses dans beaucoup de cas


---------------
The Rom's, à votre service
n°1620774
rodolpheg
Posté le 09-10-2007 à 00:08:44  profilanswer
 

Hmmm, ça fonctionne super bien quand je l'utilise dans <xsl:value-of select="position()"/> mais pas directement après id=...
 
Je vais essayer de voir ça demain.
 
Merci beaucoup !!! :)

n°1620888
TheRom_S
Posté le 09-10-2007 à 10:43:06  profilanswer
 

oui alors à la place de <node id=...>...</node>, essaie ceci :

Code :
  1. <xsl:element name="node">
  2.   <xsl:attribute name="id"><xsl:value-of select="../position()"/></xsl:attribute>
  3.   <data key="name"><xsl:value-of select="Name"/></data>
  4.   <data key="organisation"><xsl:value-of select="Organisation"/></data>
  5. </xsl:element>

en fait je crois aussi que <node id="{../position()}"> devrait fonctionner (avec les accolades)


---------------
The Rom's, à votre service
n°1621114
rodolpheg
Posté le 09-10-2007 à 15:25:19  profilanswer
 

C'est parfait !!! Vraiment, merci beaucoup. J'ai plus appris avec ton aide qu'en lisant trois tutoriels :)


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

  XLS de débutant

 

Sujets relatifs
Exo dos débutantProgrammation du pendu en C niveau débutant
Débutant Python => Passage de paramètredébutant: trouver une chaîne dans une ligne, en remplacer une autre
[Debutant] Plusieurs TABLE l'une en dessous de l'autre[RESOLU] Débutant VB - Ouvrir une image sous VB6
Débutant =) -> différence entre cadre et tableausimple script a corriger de la part d'un grand debutant
Problème de débutant :p.[python] (debutant) besoin d'un coup de main
Plus de sujets relatifs à : XLS de débutant


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