HelloooOOOooo

Voilà je vous explique ce que je souhaite réaliser : J'ai un fichier XML représentant un catalogue d'un libraire, ce catalogue contient des livres avec un auteur ... Je souhaite faire une feuille de style XSL-T qui transformerait le fichier XML en HTML. Je voudrais que le rendu HTML soit l'affichage par exemple de tous les auteurs et quand on clique sur un auteur qu'il y ai la liste de tous ses ouvrages et quand on clique sur un ouvrage que les infos (auteur,titre,editeur,genre,resume) de cet ouvrage et seulement de cet ouvrage apparaisse à l'écran.


Pour cela :
- J'ai fait un fichier XML qui contient un catalogue avec des livres.
- J'ai fait un fichier DTD de mon fichier XML.
- Je suis maintenant entrain de faire une feuille de style XSL-T pour convertir mon fichier XML en HTML.

voici un extrait de mon fichier XML
<catalogue>
   <livre>
      <auteur>Agatha Christie</auteur>
      <titre> L'affaire Prothero </titre>
      <editeur>Le Masque</editeur>
      <genre>Policier</genre>
      <resume>...</resume>
   </livre>
   <livre>
      <auteur>Agatha Christie</auteur>
      <titre>Tmoin  charge</titre>
      <editeur>Le Masque</editeur>
      <genre>Policier</genre>
      <resume>...</resume>
   </livre>
   <livre>
      <auteur>Exbrayat</auteur>
      <titre> Avanti la musica </titre>
      <editeur>Le Masque</editeur>
      <genre>Policier</genre>
        <resume>...</resume>
      </livre>
</catalogue>



voici un extrait de mon fichier XSL-T
<xsl:template match="/">
    <html>
      <head>
        <title></title>
      </head>
      <body>
        <xsl:apply-templates select="catalogue"/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="catalogue">
    <div class="catalogue">
      <xsl:apply-templates select="livre"/>
    </div>
  </xsl:template>

  <xsl:template match="livre">
    <div class="livre">
      <h1>
        Titre : 
        <xsl:value-of select="titre/."/>
      </h1>
      <h2>
        Auteur :
        <xsl:value-of select="auteur/."/>
      </h2>
      <h2>
        Editeur :
        <xsl:value-of select="editeur/."/>
      </h2>
      <h2>
        Genre :
        <xsl:value-of select="genre/."/>
      </h2> 
      <h2>
        Rsum :
        <xsl:value-of select="resume/."/>
      </h2>
    </div>
  </xsl:template>


J'ai fait tout ce que je savais faire mais là je bloque !!! En fait je sais afficher les infos de tous les livres de mon catalogue.
Je voudrais donc dans un premier temps afficher uniquement les infos d'un de ces livres.

Je pense qu'il faut passer un parametre dans ma page et faire une condition avec un "if" mais je ne sais pas comment faire !!

je peux faire http://monsite.com/monfichier.xml?parametre=toto ???
et si oui comment récupérer mon paramètre ??

Pourriez vous m'aider à avancer please ??


Merci d'avance

Poich
Bonjour!

Il n'est pas possible de passer des arguments dans l'URL pour une transformation XSL(T) dynamique.

Le plus simple serait, je crois, de mêler un peu de JavaScript dans ton fichier HTML. Avec le DOM, tu accèdes aux éléments que tu veux afficher/cacher, ensuite tu modifies leurs propriétés de style.
Insères donc dans ton head les lignes suivantes:

<script type="text/javascript"><![CDATA[
(tes fonctions JS classiques)
]]></script>


Il aurait été également envisageable de manipuler directement le DOM de ta feuille XSL avec le JavaScript, mais le résultat n'est pas assuré...
Modifié le 05 Jan 2005 - 10:37
Je ne suis pas certain de comprendre ton intention première, mais s'il s'agissait de faire faire la transformation XSL par le navigateur c'est fortement déconseillé sauf si tu maîtrises le poste client (en gros sur un intranet uniquement).

Donc dans une grande majorité des cas il vaut mieux réaliser la transformation sur le serveur.

Ensuite il y a 2 solutions pour l'affichage conditionnel : sur le serveur ou par le client.
Sur le serveur c'est parfaitement possible puisque les processeurs XSLT acceptent les paramètres externes. L'avantage réside dans le fait qu'on ne présuppose rien au niveau du client, mais l'inconvénient tient dans l'augmentation du nb de requêtes http, et de la charge serveur.
L'autre possibilité est le javascript. Cela peut être fait proprement, mais cela suppose que les postes clients acceptent le javascript.

Personnellement je choisirais la version javascript, en demandant à l'internaute qui n'accepte pas javascript de faire un petit effort s'il souhaite disposer de la fonctionnalité.
Xavier -> oui il s'agit de faire faire la transformation XSL par la navigateur (il y a Cocoon sur le serveur!)

fastclemmy -> je ne connais pas le php et je souhaite rester uniquement sur du XML - XSLT - XHTML

Gilles -> je vais peut être essayer de manipuler un peu de JavaScript mais je connais pas trop ! ça me permettrait de passer un parametre ? je pourrais afficher la liste de tous les livres (leur titre avec un lien) puis cliquer sur un titre et afficher les infos du livre choisi ?
On peut donner des parametre au moteur xslt en les mettant par exemple en get. Il est aussi possible de les envoyer via php directement (si tu l'utilise).
Pour enregistrer une variable <xsl:param name="ma_variable" />
Dans l'url tu met monfichier.xsl?ma_variable=toto .
Ensuite tu fais un xsl:if pour generer le document suivant les parametres.
@Poich> Cocoon est vraiment fait pour faire des transformations XSL. Je te conseille sincèrement de faire ta transformation sur le serveur.

@2bass> tu crois réellement qu'il est possible de passer des paramètres au moteur XSLT du navigateur ? Je ne suis pas convaincu par ton exemple. Pourrais-tu fournir de plus amples explications ?
Je rappelle qu'a priori l'url est celle du fichier source XML, qui lui même mentionne en son sein l'appel à une feuille de style XSLT.
2bass -> c'est exactement ce que je cherchais mais le serveur n'a plus cocoon !! Smiley fache
dès qu'il est réinstaller je test

Xavier -> Je pense que Cocoon est très puissant et qu'il permet de faire ce que dit 2bass
cocoon doit pouvoir le faire, je sais pas trop. Moi j'utilise les transformations avec php5 et libxslt.

@xavier->Du navigateur je sais pas je vais tenter un test avec Firefox.

Edit sur firefox ca marche pas ainsi que sur IE donc c'est mort
Modifié le 08 Jan 2005 - 19:23