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] Convertion xml-> xhtml : Un petit problème d'ordre théorique


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Points : 272
    Points
    272
    Par défaut [XSLT] Convertion xml-> xhtml : Un petit problème d'ordre théorique
    Bonjours,

    Voila un fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <root>
       <nom>blabla</nom>
       <commentaire>
           voila un <i> SUPER </i> commentaire.
        </commentaire>
     
    </root>
    J'aimerai créer un fichier XSLT qui, à partir de ce fichier, me génère le fichier XHTML suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <html>
     <head></head>
    <body>
     
    <h1>blabla</h1>
     
    Voila un <i>SUPER</i> commentaire.
     
    </body>
    </html>
    Problème : Comme vous l'avez remarquez ce fichier ne ressemble pas a un fichier xml tel que la théorie nous l'impose, puisque l'element Text contenu dans le noeud <commentaire> comporte un noeud (<i>). Alors que la théorie nous dit qu'un élément Text doit etre une feuille de l'arbre...

    Est-ce que cela est possible ? Si oui, pouvez-vous m'écrire le fichier XSLT ?

    Si ce n'est pas possible, cela signifie qu'il n'est pas possible de convertir un fichier XHTML grâce à XSLT puisque l'XHTML ne respecte pas non plus le fait qu'un élément Text ne doit pas contenir de noeud...

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Heu.... j'ai pas tout compris... tu pourrais essayer d'expliquer d'une autre façon ?

  3. #3
    Membre actif
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Points : 272
    Points
    272
    Par défaut
    Biensur,
    Ce problème n'est pas simple à expliquer, mais il devient évident lorsqu'on essaye de réaliser le fichier XSLT nécessaire à la transformation voulu.

    Je viens de voir que l'exemple de mon fichier XML est mal choisi.

    Je vais donc reprendre un exemple que j'espere plus claire.
    Voila le fichier XML qu'il faut transformer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <root>
        <nom>blabla</nom>
     
        <commentaire>
             voila un <italic> SUPER </italic> commentaire.
        </commentaire>
     
    </root>
    Remarque sur ce fichier :
    - Regarde bien le contenu du noeud <commentaire></commentaire>.
    - Il contient le texte :
    "voila un <italic> SUPER </italic> commentaire."
    - Ce texte contient le noeud : <italic> SUPER </italic>.
    - Or en XSLT je ne connais pas comment on peut traiter un noeud contenu au beau milieu d'un texte.

    Voyons le fichier HTML désiré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <html>
       <head></head>
       <body>
          <h1>blabla</h1>
     
          Commentaire :               
              voila un <i> SUPER </i> commentaire
     
       </body>
    </html>
    Remarque sur la transformation désiré :
    - le noeud <nom>blabla</nom> devient :
    <h1>*valeur_du_nom*</h1>, pas de probleme

    - le noeud <commentaire>voici....</commentaire> devient :
    Commentaire : <br>
    *valeur_du_commentaire*
    - le noeud <italic>SUPER</italic> devient :
    <i>*valeur_du_nom_en_italic*</i>


    Voici le fichier XSLT que j'ai créé pour réaliser la transformation souhaitée :

    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
    44
     
    <?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="html" encoding="ISO-8859-1" />
     
     
    <xsl:template match="/">
     
        <html>
        <head></head>
        <body>
     
        <xsl:apply-templates select="//nom" />
        <xsl:apply-templates select="//commentaire" />
     
        </body>
        </html>
    </xsl:template>
     
     
     
    <xsl:template match="nom">
        <h1>
            <xsl:value-of select="." />
        </h1>
    </xsl:template>
     
     
    <xsl:template match="commentaire">
    Commentaire : 
            <xsl:value-of select="." />
     
    </xsl:template>
     
    <xsl:template match="italic">
    <i>
            <xsl:value-of select="." />
    </i>
    </xsl:template>
     
    </xsl:stylesheet>
    Mais ce fichier ne donne pas le résultat voulu, voila ce qu'il donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <html>
       <head></head>
       <body>
          <h1>blabla</h1>
          Commentaire : 
     
              voila un SUPER commentaire
     
       </body>
    </html>
    Le mot SUPER n'est pas mis en italic. Le template <xsl:template match="italic"> n'est apparament pas appelé.

    Quelqu'un saurait-il écrire (ou simplement corriger) le fichier XSLT qui transforme ce fichier XML dans le format HTML voulu, avec la balise <i></i> autour du mot SUPER ?

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    utilise simplement au lieu de value-of

  5. #5
    Membre actif
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Points : 272
    Points
    272
    Par défaut
    MERCI beaucoup !

    Je me suis vraiment laissé troubler par la présence d'un noeud dans un texte. Cas qui n'est jamais traiter dans mon livre (comprendre XSLT) et qui me laisse perplexe depuis pas mal de temps deja.

    Merci encore,

    @+

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Il ne faut pas vraiment le considérer comme un noeud dans un texte, dis-toi simplement que ton noeud commentaire a cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    commentaire
       | => noeud texte [voila un ]
       |
       | => italic
       |       | => noeud texte [ SUPER ]
       |
       | => noeud texte [ commentaire.]
    et comme le traitement par défaut d'un noeud texte est l'insertion dans la sortie

  7. #7
    Membre actif
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Points : 272
    Points
    272
    Par défaut
    Oké merci.

    C'est plus clair dans ma tete maintenant

    @+

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

Discussions similaires

  1. [XSLT] Convertion XML/JSON
    Par leTiDevDu54 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/06/2010, 17h01
  2. Réponses: 2
    Dernier message: 25/08/2006, 20h49
  3. [XSLT] Convertion XML en WBXML
    Par wisstr dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 02/08/2006, 12h37
  4. Petit problème de XSLT
    Par foster06 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/05/2006, 18h31
  5. Réponses: 6
    Dernier message: 08/02/2005, 18h50

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