IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT] XML en TXT


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 7
    Points
    7
    Par défaut [XSLT] XML en TXT
    Bonjour,

    Je ne savais comment décrire mon problème alors le titre peut ne pas vous sembler correct, si tel est le cas je modifierais.

    J'ai un fichier XML qui se présente de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <librairie>
    <documents>
    <document type="livre" nbexemplaires="1" >
      <titre>Theorie de la musique</titre> 
      <auteur>A. Danhauser</auteur> 
      <langue>francais</langue>
      <date_edition>1996</date_edition> 
      </document>
    <document type="livre" nbexemplaires="2">
      <titre>Design Patterns - Elements of Reusable Object-Oriented Software</titre> 
      <auteur>Erich Gamma</auteur> 
      <auteur>Richard Helm</auteur> 
      <auteur>Ralph Johnson</auteur> 
      <auteur>John Vlissides</auteur> 
      <langue>anglais</langue>
      <date_edition>1995</date_edition> 
      </document>
    </documents>
    </librairie>
    J'ai volontairement réduit le fichier.

    Maintenant à l'aide de feuille de style je voudrais générer un fichier TXT, mais jusque là pas de problème, voici le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
     
    	<xsl:template match="/">
    			<xsl:apply-templates select="librairie"/>
    	</xsl:template>
     
    	<xsl:template match="librairie">
      Librairie :
     *************
    			<xsl:apply-templates select="documents/document"/>
    	</xsl:template>
     
    	<xsl:template match="document">
    <xsl:number format="1/ "/>Titre : <xsl:value-of select="titre"/>
    		auteur : <xsl:value-of select="auteur"/>
    		<xsl:text>
    		</xsl:text>
    	</xsl:template>	
    </xsl:stylesheet>
    Cela me génère un fichier texte qui se présente de la sorte :

    Librairie
    ******

    Nombre de documents : XX

    1/ Titre : blabla
    Auteur : blabla

    2/ Titre : blabla
    Auteur : blabla
    Mon problème est que j'aimerais que lorsqu'il y a plusieurs auteurs cela apparaisse comme ceci :

    X/ Titre : blabla
    Auteur : bleble
    Auteur : blabla
    Etc...
    Mais j'ai tenté avec un for-each et le résultat ne me donne pas satisfaction, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    
    	<xsl:template match="/">
    			<xsl:apply-templates select="librairie"/>
    	</xsl:template>
    
    	<xsl:template match="librairie">
      Librairie :
     *************
     
     
    			<xsl:apply-templates select="documents/document"/>
    	</xsl:template>
    
    	<xsl:template match="document">
    __________________________________________________________________________
    <xsl:number format="1/ "/>Titre : <xsl:value-of select="titre"/>
    <xsl:for-each select="auteur">
    		auteur : <xsl:value-of select="auteur"/>
    		<xsl:text>
    		</xsl:text>
    		</xsl:for-each>
    	</xsl:template>
    	
    </xsl:stylesheet>
    Mais en fait cela ne marche pas, j'obtient ceci :

    Librairie
    ******

    Nombre de documents : XX

    1/ Titre : blabla
    Auteur :
    Auteur :
    Auteur :

    2/ Titre : blabla
    Auteur :
    Le mot "Auteur :" apparait bien autant de fois que la balise <auteur> est présente, mais le value-of ne marche plus...

    Si quelqu'un peut se pencher sur mon problème.

    Merci d'avance.

    JP

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Up...

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 613
    Points
    21 613
    Par défaut
    Tu ne peux pas faire select="auteur" à l'intérieur de ton for-each, car tu as déjà fait select="auteur" et que le nœud auteur est le nœud courant.

    Ce que tu dois afficher est la valeur du nœud courant. Si je ne me trompe pas ça se fait avec <xsl:value-of select="."/>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup, j'avais complètement zappé le "."... En effet, j'etais déja sur le noeud courant comme un idiot...

    Encore une fois merci.

    Voici le code corrigé... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
     
    	<xsl:template match="/">
    			<xsl:apply-templates select="librairie/documents"/>
    	</xsl:template>
     
    	<xsl:template match="documents">
      Librairie :
     *************
     
     			Nombre de documents : <xsl:value-of select="count(document)"/>
     			<xsl:text>
     			</xsl:text>
    			<xsl:apply-templates select="document"/>
    	</xsl:template>
     
    	<xsl:template match="document">
    __________________________________________________________________________
    <xsl:number format="1/ "/>Titre : <xsl:value-of select="titre"/>
    <xsl:for-each select="auteur">
    		auteur : <xsl:value-of select="."/>
    		</xsl:for-each>
    		<xsl:text>
    		</xsl:text>
    	</xsl:template>
     
    </xsl:stylesheet>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] XML -> TXT : Complétion par des blancs ?
    Par Francalex dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 14/10/2009, 11h12
  2. [XSLT] Conversion xml vers txt ou mdb etc
    Par narodar dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/06/2006, 14h31
  3. [XSLT] [XML->HTML] transformation XML -> HTML via XSL
    Par Great Sayaman dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/12/2004, 22h12
  4. [XSLT] XML vers XML
    Par ren0 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 13/10/2004, 12h54
  5. [XSLT] XML et PHP
    Par Dam'$ dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 05/08/2004, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo