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 :

xhtml vers xhtml [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Août 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut xhtml vers xhtml
    Bonjour,

    Je débute en xslt et il y a un truc que je ne comprends pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml"/>
        <xsl:template match="span[@style='font-style:italic;']">
            <em><xsl:apply-templates/></em>
        </xsl:template>
      <xsl:template match="*|@*">
        <xsl:copy>
          <xsl:apply-templates select="@*"/>
          <xsl:apply-templates/>
        </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>
    Bon, convertir les italiques en accentuation... cette transformation fonctionne avec un fichier du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0"?>
    <html>
        <p><span style="font-style:italic;">hello!</span></p>
    </html>
    mais pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0"?>
    <html xmlns="http://www.w3.org/1999/xhtml">
        <p><span style="font-style:italic;">hello!</span></p>
    </html>
    Comment écrire une feuille de style pour que ça fonctionne?

    Merci d'éclairer ma lanterne!

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    c'est à cause du xmlns (oui, bon, tu avais deviné... -_-°)

    Cela définit un namespace, et donc d'une certaine manière ça change le nom de toutes les balises.

    - Première étape : réussir à reconnaître les balises et à appliquer les transformations.

    Pour ça tu dois faire deux choses :

    -- définir le namespace "http://www.w3.org/1999/xhtml" dans ta stylesheet et lui associer un préfixe. Example :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:h="http://www.w3.org/1999/xhtml">
    J'ai mis "h" mais ça peut être n'importe quoi, tu mets ce que tu veux.

    -- utiliser ce préfixe dans le nom des balises à reconnaître :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="h:span[@style='font-style:italic;']">
    => Et voilà ! maintenant tes spans sont reconnus et sont remplacés par <em> !

    - Deuxième étape : euh oui mais maintenant mes <em> ont un truc bizarre comme xmlns="" xmlns:h="http://www.w3.org/1999/xhtml" sur eux. C'est pas très normal !

    On va enlever ça...

    D'abord enlever xmlns=""

    C'est dû au fait que tous les éléments copiés par ta stylesheet sont dans le namespace "http://www.w3.org/1999/xhtml". Par contre les éléments <em> créés par ta stylesheet n'y sont pas, puisque rien ne leur dit d'y être !
    Du coup ils n'ont pas de namespace et le xmlns="" est là pour ça.

    Il faut que ta stylesheet crée ses nouveaux éléments dans le même namespace. Pour ça on va l'ajouter à nouveau dans la stylesheet, une fois avec préfixe, une fois sans préfixe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:h="http://www.w3.org/1999/xhtml"
      xmlns="http://www.w3.org/1999/xhtml">
    => Et voilà ! Les <em> n'ont plus de xmlns="".

    Maintenant enlever xmlns:h="http://www.w3.org/1999/xhtml"

    Puisque ce namespace est défini dans la stylesheet, les éléments créés par la stylesheet l'ont aussi.
    On a besoin de lui parce qu'on veut pouvoir reconnaître h:span, mais on ne veut pas qu'il apparaisse dans les éléments nouvellement créés.

    Pour ça il faut le signaler dans la stylesheet, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:h="http://www.w3.org/1999/xhtml"
      xmlns="http://www.w3.org/1999/xhtml"
      exclude-result-prefixes="h">
    Ça veut dire "je définis le préfixe h dans la stylesheet, mais je ne veux pas qu'il apparaisse dans le document créé".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Août 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Merci!
    Merci beaucoup!

    Ces explications sont très claires!

    Je mets en résolu.

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

Discussions similaires

  1. [JAXB] Mapping "any" vers XHTML
    Par cinezone dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 28/12/2010, 12h56
  2. convertir de html vers xhtml
    Par sampaiX dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 30/06/2010, 10h35
  3. [XHTML] Outil de transformation html vers xhtml
    Par noarno dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 14/04/2006, 12h14

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