tri et regroupement

tri et regroupement - XML/XSL - Programmation

Marsh Posté le 21-04-2008 à 12:49:54    

mon doc xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE testdtd SYSTEM "testdtd.dtd">
<?xml-stylesheet type="text/xsl" href="testxslt.xsl"?>
<biblio>
 <text>This is an XML document</text>
 <collection>
  <titre>Collection Jules Vernes</titre>
  <livre status="en stock">
   <titre>20.000 Lieux sous les mers</titre>
   <auteur>Jules Vernes</auteur>
  </livre>
  <livre status="en stock">
   <titre>De la Terre à la Lune</titre>
   <auteur>Jules Vernes</auteur>
  </livre>
  <livre status="en stock">
   <titre>Robur le conquérant</titre>
   <auteur>Jules Vernes</auteur>
  </livre>
 </collection>
 <collection>
  <titre>Classiques de la S.F.</titre>
  <livre status="en stock">
   <titre>Un Défilé de robots</titre>
   <auteur>Isaac Asimov</auteur>
  </livre>
  <livre status="en stock">
   <titre>L'Homme bicentenaire</titre>
   <auteur>Isaac Asimov</auteur>
  </livre>
  <livre status="sur commande">
   <titre>I, Robot</titre>
   <auteur>Isaac Asimov</auteur>
  </livre>
  <livre status="en stock">
   <titre>Le Robot qui rêvait</titre>
   <auteur>Isaac Asimov</auteur>
  </livre>
 </collection>
 <collection>
  <titre>L'informatique pour les nuls</titre>
  <livre status="sur commande">
   <titre>HTML pour les nuls</titre>
    <auteur>Jules Vernes</auteur>
  </livre>
  <livre status="en stock">
   <titre>JavaScritp pour les nuls</titre>
   <auteur></auteur>
  </livre>
  <livre status="épuisé">
   <titre>Ajax pour les nuls</titre>
   <auteur></auteur>
  </livre>
 </collection>
 <livre status="en stock">
  <titre>Le petit chaperon rouge</titre>
  <auteur>Charles Perrault</auteur>
 </livre>
 <livre status="en stock">
  <titre>Les contes de Grimm</titre>
  <auteur>Les fréres Grimm</auteur>
 </livre>
 <livre status="en stock">
  <titre>La belle au bois dormant</titre>
  <auteur>Charles Perrault</auteur>
 </livre>
</biblio>
 
mon xls (extrait)
<?xml version="1.0" encoding="utf-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- definition de parametre -->
<xsl:param name="titre-page" select="'Contenu de la biblioteque'"/>  
<!-- utilise pour le regroupement des auteurs -->
<xsl:key name="id" match="auteur" use="."/>  
 
 <xsl:template match="/biblio">
  <!-- entete du document html-->  
  <html><title><xsl:value-of select="$titre-page"/></title>
  <body>
  <!-- liste des auteurs regroupés -->
 
Liste des auteurs<br/>
  <xsl:apply-templates select="//auteur[generate-id(.)=generate-id(key('id', .)[1])]">
   <xsl:sort order="ascending" select="."/>  
  </xsl:apply-templates>  
  <hr/>
 
liste de touts les livres<br/>
  <xsl:apply-templates select="//livre">
  </xsl:apply-templates>  
   
  <hr/>
 
  </body>  
  </html>  
 </xsl:template>
 <xsl:template match="livre">    
  <font color="red"><small>(-------livre)</small></font>
                          <i><xsl:value-of select="titre"/></i> (<small><xsl:value-of select="auteur"/></small> )
  <br/>
 </xsl:template>
 <xsl:template match="auteur">
  <xsl:if test="not(.='')">
  <font color="red"><small>(----auteur)</small></font>[<xsl:value-of select="."/>]<br/>
  </xsl:if>
 </xsl:template>
</xsl:transform>
et j'obtient
 
 
Liste des auteurs
(----auteur) [Charles Perrault]  
(----auteur) [Isaac Asimov]  
(----auteur) [Jules Vernes]  
(----auteur) [Les fréres Grimm]  
 
--------------------------------------------------------------------------------
liste de touts les livres
(-------livre)20.000 Lieux sous les mers (Jules Vernes) [ok] ...1
(-------livre)De la Terre à la Lune (Jules Vernes) [ok] ...2
(-------livre)Robur le conquérant (Jules Vernes) [ok] ...3
(-------livre)Un Défilé de robots (Isaac Asimov) [ok] ...4
(-------livre)L'Homme bicentenaire (Isaac Asimov) [ok] ...5
(-------livre)I, Robot (Isaac Asimov) [!] ...6
(-------livre)Le Robot qui rêvait (Isaac Asimov) [ok] ...7
(-------livre)HTML pour les nuls (Jules Vernes) [!] ...8
(-------livre)JavaScritp pour les nuls () [ok] ...9
(-------livre)Ajax pour les nuls () /!\ ...10
(-------livre)Le petit chaperon rouge (Charles Perrault) [ok] ...11
(-------livre)Les contes de Grimm (Les fréres Grimm) [ok] ...12
(-------livre)La belle au bois dormant (Charles Perrault) [ok] ...13
 
--------------------------------------------------------------------------------
jusque la tout va bien !
maintenant mon problème
avoir la liste des auteurs et en dessous de chaque auteur la liste de ses livres
 
je sais chercher pour un auteur
...
liste des livres de l'auteur est 'Jules Vernes'<br/>
  <xsl:apply-templates select="//livre[./auteur='Jules Vernes']">
  </xsl:apply-templates>  
  <hr/>
...
mais comment remplacer la valeur en "dur" par la valeur pour chaque auteur
merci de votre aide

Reply

Marsh Posté le 21-04-2008 à 12:49:54   

Reply

Marsh Posté le 28-04-2008 à 11:02:05    

Tu fais un template pour la balise auteur dans laquelle tu selectionne tous les livres qui correspondent...
 
Pense à coller ton xml et ton xsl dans un bloc Fixe ou C/c++ ce sera plus clair pour tout le monde!  :jap:

Message cité 1 fois
Message édité par avander le 28-04-2008 à 11:04:18
Reply

Marsh Posté le 28-04-2008 à 15:13:08    

avander a écrit :

Tu fais un template pour la balise auteur dans laquelle tu selectionne tous les livres qui correspondent...
 
Pense à coller ton xml et ton xsl dans un bloc Fixe ou C/c++ ce sera plus clair pour tout le monde!  :jap:


j'ai déjà un template "auteur"

 
<xsl:template match="auteur">
     <xsl:if test="not(.='')">
         <font color="red"><small>(----auteur)</small></font>[<xsl:value-of select="."/>]<br/>
      </xsl:if>
</xsl:template>  


 
que doit-je lui ajouter comme code pour selectionner les livres de l'auteur, merci de ton aide.

Reply

Sujets relatifs:

Leave a Replay

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