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 :

[XSL] Récupérer correctement des balises


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Points : 177
    Points
    177
    Par défaut [XSL] Récupérer correctement des balises
    Bonjour à tous,

    Je suis actuellement en train de développer mes premières feuilles de style XSL.
    Je me retrouve donc avec ce code XML à transformer, en html :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <TEI>
        <text>
            <body>
                <div rend="center">
                    <p>bienfaits de la mer	1° elle nous fournit la pluie, le poisson, les perles 2° elle nous apporte au moyen de la
                    <lb/>navigation les richesses de tous les pays. 3° elle facilite la rapide propagation de la Foi
                    <lb/>chez les nations » 52.</p>
                    <p>Le soleil	« est l'image de Notre Seigneur qui est sorti du sein de son père.
                    <lb/>chaque jour  Dieu lui marque le point où il doit partir &amp; celui où il doit s'arrêter.
                    <lb/>55.</p>
                    <p>utilité de la Lune.	elle tempère l'obscurité l'obscurité - elle règle les travaux de la Campagne - elle éclaire
                    <lb/>l'homme qui a besoin de voyager durant la nuit, &amp; nous révèle à chaque instant la
                    <lb/>sagesse du créateur.</p>
                    <p>« je remarque sur les Poissons que c'est une merveille qu'ils puissent naître &amp; vivre dans l'eau de la mer, qui est salée !
                    <lb/>&amp; que leur race ne soit pas anéantie depuis longtemps.  57.</p>
                    <p>utilité des reptiles &amp; des	
                    <lb/>animaux sauvages</p>
                    <p>ils nous apprennent à respecter &amp; à craindre Dieu
                    <lb/>ils nous fournissent aussi de précieuses fourrures -</p>
                </div> 
            </body>
        </text>
    </TEI>
    En gros je cherche à obtenir une page html de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <html>
    	<body>
    		<p>blablabla<br /> blablablablablablablablablablablabla </p>
    		<p>blablablablablablablablablablablabla<br /> blablablablablablablablablablablabla </p>
    	</body>
    </html>
    Vous noterez que :
    la balise <body> du doc XML devient <body>
    la balise <p> du doc XML devient <p>
    et que la balise <lb/> du doc XML devient <br />

    Afin de réaliser cette transformation automatiquement j'ai donc écris cette feuille XSL :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?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"
            encoding="utf-8"
            doctype-public="-/W3C//DTD XHTML 1.0 Strict//EN"
            doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
            indent="yes" />
     
        <xsl:template match="TEI">
            <html>
                <xsl:apply-templates select="text"/>
            </html>
        </xsl:template>
     
        <xsl:template match="text">
                <xsl:apply-templates select="body"/>
        </xsl:template>
     
        <xsl:template match="body">
            <body>
                <xsl:apply-templates select="div"/>
            </body>
        </xsl:template>
     
        <xsl:template match="div">
            <div>
                <xsl:apply-templates select="p"/>
            </div>
        </xsl:template>  
     
         <!-- C'est ICI que se trouve le problème ! -->
        <xsl:template match="p">
            <p>
                <xsl:value-of select="."/>
                <xsl:apply-templates select="lb"/>
            </p>
        </xsl:template>
     
        <xsl:template match="lb">
            <br />
        </xsl:template>
    </xsl:stylesheet>
    J'ai indiqué dans feuille XSL à quel niveau se trouve le problème (tout en bas).
    Pour expliciter clairement mon problème voici ce qui se passe :
    Quand j'applique ma feuille XSL au doc XML : les <lb/> sont bien transformés en <br />
    MAIS les <br /> générés se trouvent systématiquement placés en fin de paragraphe (<p>) et non pas à l'endroit où il devrait se trouver, c'est à dire, le plus souvent : au milieu du texte....

    Si vous avez des idées à me proposer, pour corriger / améliorer ma feuille XSL et par la même occasion résoudre mon problème....Bah je suis preneur !

    Merci d'avance

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="p">
            <p>
                <xsl:apply-templates/>
            </p>
        </xsl:template>
    C'est tout

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Points : 177
    Points
    177
    Par défaut
    Super ça marche!
    Merci à toi camboui (j'adore le pseudo )

    Mais comme je le craignais, j'ai peur de ne pas bien comprendre la réponse

    Ma question est donc la suivante :
    Cette ligne <xsl:apply-templates/> elle fait quoi ?
    Elle appelle tout les template et les applique si nécessaire ?
    Elle appelle UNIQUEMENT le template portant sur la balise <lb /> parce qu'il s'agit d'un template plus précis ?
    Autre cas ?

    Bref je veux bien une petite explication, histoire de bien comprendre "mon" code

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Elle applique les templates de tous les noeuds descendants, dans l'ordre. Du texte est un noeud. Dans ton cas, en supposant qu'il n'y a pas d'autre noeud que du texte et <lb/>, c'est équivalent à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="text()|lb"/>

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Points : 177
    Points
    177
    Par défaut
    Merci à toi encore une fois!

    C'est parfait j'ai tout capté

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 72
    Points : 58
    Points
    58
    Par défaut
    Merci aussi de ma part !!

    Le net étant assez vide de tutos (efficaces) sur le sujet, la lecture de cette discussion m'a enfin permis de comprendre comment traiter une balise perdue dans du texte

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

Discussions similaires

  1. [XML/XSL/XSD] Ordre des balises pour vérification
    Par Tomtom31 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 02/07/2015, 14h52
  2. Récupérer correctement des valeurs d'un fichier .txt
    Par lil_butter dans le forum Général Python
    Réponses: 6
    Dernier message: 11/05/2014, 12h17
  3. [XSL~FO] affichage des balises <strong>
    Par davinout dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 09/02/2007, 15h55
  4. Réponses: 9
    Dernier message: 31/01/2007, 15h04
  5. [XSL][re] Ecrire des balise qui ne seront pas interpretées
    Par FrRoulio dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/03/2004, 12h32

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