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 :

Modifier un fichier XHTML avec XSL


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut Modifier un fichier XHTML avec XSL
    Bonjour à tous,

    J'ai des fichiers xhtml, de toutes formes, et j'aimerai pouvoir y effectuer des changements à la volée sur certaines balises.
    Par exemple, changer un champ input de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" value="machin" />
    ... en span :
    Je me débats maintenant depuis un petit moment avec XSL et j'avoue que je commence à douter.
    Est-ce que c'est possible de lui dire "change moi tous les input du fichier en span" sans que l'on précise le chemin par lequel il devra passer pour trouver chacun des input ?
    Parce que là, comme je suis parti, je suis obligé de recréer entièrement le XHTML (balise par balise quasiment) que j'avais pour refaire quasiment la même chose à un détail près. De plus, ça commence à ne plus être applicable à tous types de structures.

    Dois-je continuer sur cette voix ou penser à aller voir ailleurs (DOM, SAX...) ?

    Voilà, je suis peut-être allé un peu vite. N'hésitez pas à me demander plus de détails si besoin est.

    Merci pour votre aide.

  2. #2
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour m1ckros,

    tu trouvera les réponses dans les tutoriels XML destinés aux débutants.

    Bonne lecture.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Hello,
    XSL-T est très performant & concis dans ce genre de tache. En gros on part d'une transformation en copie et on y ajoute les exceptions qu'on souhaite introduire.

    Un XSL-T en copie c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
        <xsl:template match="node() | @*">
             <xsl:copy>
                  <xsl:apply-templates select="node() | @*"/>
             </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>
    Après si on prend ton exemple avec les champs "input" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
        <xsl:template match="input">
             <span><xsl:value-of select="@value"/></span>
        </xsl:template>
     
        <xsl:template match="node() | @*">
             <xsl:copy>
                  <xsl:apply-templates select="node() | @*"/>
             </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>
    Si tu traites du xhtml, attention au namespace qu'il faut bien préciser dans le XSL-T

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut
    Merci Morbo, je commençais tout juste à partir dans cette direction.

    Par contre, c'est un peu bizarre.
    Prenons un fichier xhtml basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    	<title></title>
    </head>
    <body>
    	<p>bonjour</p>
    	<form>
    		<input type="text" value="voiture" />
    		<input type="submit" />
    	</form>
    </body>
    </html>
    Si j'y applique le XSL suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="utf-8" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:root="http://localhost:8080/monProjet">
    	<xsl:template match="node()|@*">
    		<p>Salut</p>
    	</xsl:template>
    </xsl:stylesheet>
    ... j'ai du html généré (pas vraiment valide, je vous l'accorde) qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="UTF-8"?>
    <p xmlns:root="http://localhost:8080/monProjet">Salut</p>
    Mais, dès que je veux faire plus compliqué :

    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
    <?xml version="1.0" encoding="utf-8" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:root="http://localhost:8080/monProjet">
     
    	<xsl:template match="node()|@*">
    		<xsl:copy>
    			<xsl:apply-templates select="node()|@*" />
    		</xsl:copy>
    	</xsl:template>
     
    	<xsl:template match="input">
    		<span><xsl:value-of select="@value"/></span>
    	</xsl:template>
     
    </xsl:stylesheet>
    ... lui ne veut pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    	<title/>
    </head>
    <body>
    	<p>bonjour</p>
    	<form>
    		<input type="text" value="voiture"/>
    		<input type="submit"/>
    	</form>
    </body>
    </html>
    Est-ce que cela pourrait venir de cette histoire de namespace ?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Ouaip, ça vient des namespaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html xmlns="http://www.w3.org/1999/xhtml" >
    Ca veut dire que toute les élements enfants sans préfixes appartiennent au namespace "http://www.w3.org/1999/xhtml" (sauf si un élement redéfini le namespace par défaut).
    Une notation équivalente possible en utilisant le préfixe 'x' pourrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <x:html xmlns:x="http://www.w3.org/1999/xhtml" >
    Bref, ça veut dire qu'il faut le spécifier dans le 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
    <?xml version="1.0" encoding="utf-8" ?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xhtml="http://www.w3.org/1999/xhtml">
    
    <!-- pour générer du html en sortie et non du xml -->
    	<xsl:output method="html" version="4.0"
    encoding="iso-8859-1" indent="yes"/>
    	<xsl:template match="node()|@*">
    		<xsl:copy>
    			<xsl:apply-templates select="node()|@*" />
    		</xsl:copy>
    	</xsl:template>
     
    	<xsl:template match="xhtml:input">
    		<span><xsl:value-of select="@value"/></span>
    	</xsl:template>
     
    </xsl:stylesheet>
    Note que les préfixes du xml en entrée et celui du xsl peuvent être différents, tout ce qui compte c'est l'unicité de "http://www.w3.org/1999/xhtml"

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut
    Merci, c'est exactement ça !

    Pour method="html", je crois que je vais oublier. Il me pourrit tellement mon HTML que ç'en est choquant (ajout de balises meta en majuscules, modification des <balise /> en <balise>...).

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    On pourrait préférer l'approche :

    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
    <?xml version="1.0" encoding="utf-8" ?>
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:xhtml="http://www.w3.org/1999/xhtml"
      exclude-result-prefixes="xhtml"
      >
    
    	<xsl:template match="node()|@*">
    		<xsl:copy>
    			<xsl:apply-templates select="node()|@*" />
    		</xsl:copy>
    	</xsl:template>
     
    	<xsl:template match="xhtml:input">
    		<span><xsl:value-of select="@value"/></span>
    	</xsl:template>
     
    </xsl:stylesheet>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Modifier un fichier word avec Delphi
    Par Andry dans le forum Delphi
    Réponses: 5
    Dernier message: 10/07/2007, 16h56
  2. Transformer un très gros fichier XML avec XSL
    Par wozzz dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 30/05/2006, 10h57
  3. Modifier un fichier txt avec FSO?
    Par flo456 dans le forum ASP
    Réponses: 6
    Dernier message: 25/10/2005, 22h16
  4. extraire un fichier d'un fichier XML avec XSL ?
    Par pirbd dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 14/09/2005, 10h31
  5. [DOM] [Débutant(e)] Modifier un fichier XML avec DOM
    Par macks dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 05/07/2005, 14h13

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