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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  [XSLT] cas concret

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[XSLT] cas concret

n°972807
oirom
Posté le 05-02-2005 à 14:52:40  profilanswer
 

Je débute en XML, et rebute sur le XSLT.
j'ai fait le tour des tutos, mais je ne trouve pas de solution,
et comme des lignes de codes valent mieux qu'un long discours...
 
XML:

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <source>
  3. <consoles>
  4.   <console id="1">
  5.    <nom>x-box</nom>
  6.    <fabricant>2</fabricant>
  7.    <support>dvd-rom</support>
  8.   </console>
  9.   <console id="2">
  10.    <nom>playstation</nom>
  11.    <fabricant>1</fabricant>
  12.    <support>cd-rom</support>
  13.   </console>
  14.   <console id="3">
  15.    <nom>playstation 2</nom>
  16.    <fabricant>1</fabricant>
  17.    <support>dvd-rom</support>
  18.   </console>
  19.   <console id="4">
  20.    <nom>game cube</nom>
  21.    <fabricant>3</fabricant>
  22.    <support>mini dvd</support>
  23.   </console>
  24. </consoles>
  25. <fabricants>
  26.   <fabricant id="1">
  27.    <nom>sony</nom>
  28.   </fabricant>
  29.   <fabricant id="2">
  30.    <nom>microsoft</nom>
  31.   </fabricant>
  32.   <fabricant id="3">
  33.    <nom>nintendo</nom>
  34.   </fabricant>
  35. </fabricants>
  36. </source>


mon XSL est à modifier:

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3. <xsl:output method="html"/>
  4. <xsl:template match="fabricants/fabricant">
  5. <ul>
  6.   <xsl:value-of select="nom"/> : <xsl:call-template name="articles"/>
  7. </ul>
  8. </xsl:template>
  9. <xsl:template name="articles">
  10. <xsl:value-of select="/source/consoles/console[fabricant='1']"/>     <!-- erreur en mettant @id à la place de 1 -->
  11. </xsl:template>
  12. </xsl:stylesheet>


 
le résultat attendu serait quelque chose qui ressemble à ca :

Code :
  1. <ul>
  2. <li>sony: playstation 1, playstation 2</li>
  3. <li>microsoft: x-box</li>
  4. <li>nintendo: game cube</li>
  5. </ul>


mais je n'arrive pas à afficher les articles de chaque fabricants.


Message édité par oirom le 10-02-2005 à 14:53:32
mood
Publicité
Posté le 05-02-2005 à 14:52:40  profilanswer
 

n°972859
zeppeto
Posté le 05-02-2005 à 17:21:32  profilanswer
 

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    <xsl:key name="getConsoleByFabricant" use="fabricant/text()" match="//console"/>
    <xsl:template match="/">
        <ul>
            <xsl:apply-templates select="//fabricants/fabricant"/>
        </ul>
    </xsl:template>
    <xsl:template match="fabricant">
        <li>
            <xsl:value-of select="nom"/> : <xsl:apply-templates select="key('getConsoleByFabricant', @id)"/>
        </li>
    </xsl:template>
    <xsl:template match="console">
        <xsl:value-of select="nom"/>
        <xsl:if test="position() != last()">, </xsl:if>
    </xsl:template>
</xsl:stylesheet>

n°975856
oirom
Posté le 08-02-2005 à 22:08:31  profilanswer
 

merci beaucoup,
c'est exactement ce que je cherchais :jap:


Message édité par oirom le 08-02-2005 à 22:08:54
n°977704
oirom
Posté le 10-02-2005 à 15:09:58  profilanswer
 

je commence à comprendre, mais je bloque de nouveau, :(  
je voudrais maintenant un résultat comme ceci:
(meme source xml mais avec des elements <console> en plus)

Code :
  1. <ul>
  2.   <li>sony:
  3.     <ul>
  4.       <li>cd-rom: playstation 1</li>
  5.       <li>dvd-rom: playstation 2, playstation 3</li>
  6.     </ul>
  7.   </li>
  8.   <li>microsoft:
  9.     <ul>
  10.       <li>dvd-rom: x-box</li>
  11.     </ul>
  12.   </li>
  13.   <li>nintendo:
  14.     <ul>
  15.       <li>mini dvd: game cube</li>
  16.       <li>carte memoire: nes, supernes, nintendo64, gameboy</li>
  17.     </ul>
  18.   </li>
  19. </ul>


la méthode que j'ai trouvé fonctionne avec une nouvelle <key>
et ceci : <xsl:for-each select="/console[generate-id(.)=generate-id(key('key', yyy))]/xxx">
mais je n'arrive pas à l'appliquer correctement


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

  [XSLT] cas concret

 

Sujets relatifs
XSLT, DOM : fonction nextSibling()Diriger un flux XML vers un parseur XSLT
[XML] Faire une transfo XSLT sur un doc avec un XSD [resolu]bilblio xslt ???
déclaration xml inattendue / erreur dans fichier xslt ? XML et XSLT en api JAVA
[xslt] Variable et patterninserer une transformation xslt dans un bloc <div></div>
Comment utiliser XQuery avec un exemple concretTemplate ou XSLT
Plus de sujets relatifs à : [XSLT] cas concret


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)