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]Comment copier un document xml avec xslt.


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut [XSLT]Comment copier un document xml avec xslt.
    Bonjour,

    J'aimerais recopier un document xml à l'aide d'une feuille xslt en changeant juste le nom de certaines balises.
    Comme mon document xml d'origine est assez complexe, je ne souhaite pas ré écrire explicitement toutes les balises dans ma feuille xslt. J'ai donc écrit ce bout de code xslt qui permet de recopier n'importe quel document à l'identique :



    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
    <xsl:template match="/">
     
      <xsl:apply-templates select="Root" />
     
    </xsl:template>
     
     
     
      <xsl:template match="*">
     
        <xsl:element name="{name()}">
     
          <xsl:if test="count(./*)=0">
     
            <xsl:value-of select="."/>       
     
          </xsl:if>
     
          <xsl:apply-templates select="./*" />
     
        </xsl:element>
     
      </xsl:template>


    Le problème est que ce xslt ne recopiera pas les balises de contenu mixte (contenant balise + texte).

    Je ne souhaite pas utiliser les balise xslt copy et copy-of car je veux réellement parcourir chaque balise pour renommer certaines d'entre elles.

    Auriez-vous une idée pour modifier mon code ci dessus afin qu'il recopie aussi les balises de contenu mixte ?

    merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    exemple de code qui utilise xsl:copy et pourtant passe sur toute le balise.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output 
      		encoding="ISO-8859-15"
      		method="xml"
      		indent="yes" />
     
    	<xsl:template match="node() | @*">
    		<xsl:copy>
    			<xsl:apply-templates select="@* | node()"/>
    		</xsl:copy>
    	</xsl:template>
    </xsl:stylesheet>
    imaginons que tu souhaite renommer les balise fred en maa, cela donne
    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
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output 
      		encoding="ISO-8859-15"
      		method="xml"
      		indent="yes" />
     
    	<xsl:template match="node() | @*">
    		<xsl:copy>
    			<xsl:apply-templates select="@* | node()"/>
    		</xsl:copy>
    	</xsl:template>
     
    	<xsl:template match="fred">
    		<maa>
    			<xsl:apply-templates select="@* | node()"/>
    		</maa>
    	</xsl:template>
    </xsl:stylesheet>

  3. #3
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Merci, c'est parfait.

  4. #4
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    de rien

  5. #5
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Encore un truc :
    Si maintenant je veux renommer toutes les balise qui commence par fred. Comment puis-je faire cela ? Je crois savoir que l'on ne peux utiliser les expression régulière qu'avec la norme 2.0 de xslt. Comment ferait-on cela en xslt 2.0 ? Ou peut être (et ça m'arrangerait) as-tu une astuce pour faire cela en xslt 1.0 ?
    Si tu pouvais me présenter un méthode pour chacune des normes, ça serait le top

    merci

  6. #6
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Salut,
    C'est possible en XSLT1.0 avec un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="*[starts-with(name(),'fred')]">

  7. #7
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    C'est parfait !

    Merci beaucoup.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 61
    Points
    61
    Par défaut
    Oui mais quand on a un namespace particulier dans le xml ça ne marche pas

    Et si par exemple (pour le namespace toto) on fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	<xsl:template match="toto:fred">
    		<maa>
    			<xsl:apply-templates select="@* | node()"/>
    		</maa>
    	</xsl:template>
    ... c'est pareil la balise fred n'est pas remplacée !

  9. #9
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Hein?
    En début de ton xsl-t, t'as défini correctement le préfixe toto ? avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:toto=".............."
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="*[starts-with(name(),'fred')]">
    devient juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="toto:*[starts-with(name(),'fred')]">

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 61
    Points
    61
    Par défaut
    C'est ok merci.

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

Discussions similaires

  1. comment parser un document xml avec gwt?
    Par zemzoum89 dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 01/12/2010, 15h05
  2. [XSLT] Comment lier un fichier XML et XSLT
    Par bitou dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 16/08/2006, 15h35
  3. comment associer les couleur a un document xml avec xslt
    Par moh_yougo dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 30/01/2006, 16h08
  4. [DOM XML][XSLT] Création d'un document XML avec PHP
    Par ToxiZz dans le forum Bibliothèques et frameworks
    Réponses: 21
    Dernier message: 16/01/2006, 17h44
  5. [XSLT][XSD>XML]transformer xsd en xml avec xslt
    Par émile-henri dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 14/06/2005, 15h06

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