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] Renommer des noeuds en XSL


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut [XSL] Renommer des noeuds en XSL
    Bonjour,

    j'essais actuellement de remplacer tous les namespace d'un fichier XML grâce à une rêgle XSL. J'ai vu pas mal d'exemples sur le net de replacement de contenus de noeud mais pas des noeuds eux mêmes.

    Pour être plus clair, j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <toto:fiche>
    <toto:id>1234</toto:id>
    <toto:name>Toto</toto:name>
    </toto:fiche>
    Et j'aimerais que ma transformation me renvoit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <titi:fiche>
    <titi:id>1234</titi:id>
    <titi:name>Toto</titi:name>
    </titi:fiche>
    Quelqu'un à t-il déjà eu une besoin similaire?
    Merci, Benjamin

  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 suivant modifie la balise fiche en fiche2 mais laisse le reste du document xml à 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
     
    <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="fiche">
    		<fiche2>
    			<xsl:apply-templates select="@* | node()"/>
    		</fiche2>
    	</xsl:template>
    </xsl:stylesheet>
    mais ton soucis si je regarde ton exemple est de changer le namespace de chaque balise.
    Qu'est qui te gêne dans le namespace toto? il est vraiment différent de titi ou c'est juste le terme toto qui te gêne?

  3. #3
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Je dirai que c'est à toi de recréer chaque balise lorsque tu passes sur l'une d'elles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <template match="/">
         <root xmlns:titi="monnamespace">
             <apply-templates/>
         </root>
    </template>
    <template match="toto:balise1">
         <titi:balise1>
              <apply-templates/>
         </titi:balise1>
    </template>
    etc.
    Il y a surement un moyen plus générique de le faire mais ca reste une solution possible. Je crois d'ailleurs avoir déjà vu cette question avec l'algo générique donné par l'un des membres parmi les threads existants ; cet algo otait le namespace il me semble ...
    See you, space cowboy... and if you're satisfied, click on

  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
    si je reprend l'idée de Bizur en essayant de la rendre générique
    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:element name = "local-name (.)" namespace = "http://www.titi">
    			<xsl:apply-templates select="@* | node()"/>
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="@*">
                     <xsl:attribute name = "local-name (.)" namespace = "http://www.titi">
    			<xsl:apply-templates select="@* | node()"/>
    		</xsl:attribute>
    	</xsl:template>
    </xsl:stylesheet>

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Salut à tous, merci beaucoup pour vos réponses rapides:

    @fraoustin: c'est effectivement le namespace que j'ai besoin de transformer, toto ne me gène pas plus que ça j'ai juste besoin de le transformer en titi.
    @BizuR: merci pour la proposition, j'avais un morceau de code qui faisait un peu ça mais comme j'ai beaucoup de noeuds à renommer et qu'ils changent de temps en temps j'aurais aimer trouver quelque chose de générique.
    @fraoustin 2eme message: j'ai testé le code ça me donne à partir du XML suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
    <toto:fiche>
    	<toto:id>1234</toto:id>
    	<toto:name>Toto</toto:name>
    </toto:fiche>
    La transformation suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?xml version="1.0" encoding="UTF-8"?>
    	1234
    	Toto
    Je ne suis pas un as en XSL et je ne comprends pas bien à quel moment il peut savoir qu'il doit prendre le namespace toto pour le changer en titi dans la proposition... Pour info j'utilise xalan2.6.0 et xerces pour mes transformations...

    ++ Benjamin

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Hello, pas d'autres idées alors?
    Je n'ai pas trouvé le moyen de faire ce que je voulais en butinant un peu sur la toile, c'est vrai que le besoin ne me semble pas vraiment "dans l'esprit" du XSL. Peut-être que le choix de la techno aurait pu être plus heureux...
    C'est quand même énervant quand on y pense l'opération n'est ni plus ni moins qu'un 'rechercher/remplacer' sur un fichier texte

    Bon bon, je mettrais à jour le post si jamais je trouve un workaround.
    ++ Benjamin

  7. #7
    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
    et voila
    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:element name = "local-name (.)" namespace = "http://www.titi">
    			<xsl:apply-templates select="@* | node()"/>
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="@*">
                     <xsl:attribute name = "local-name (.)" namespace = "http://www.titi">
    			<xsl:apply-templates select="@* | node()"/>
    		</xsl:attribute>
    	</xsl:template>
    </xsl:stylesheet>
    j'étais en vacances d'ou le retard de la réponse

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Pas de soucis, j'ai pu tester ce bout de code ça fonctionne très bien, même si ça change un peu la forme des noeuds (<fiche xmlns="titi"> au lieu de <titi:fiche>). Comme ça reste standard ça me va, une autre piste que je n'ai pas trop poussée mais qui semblait prometteuse est l'élément: xsl:namespace-alias

    Merci
    Benjamin

Discussions similaires

  1. XSL: Probleme avec des noeuds parent
    Par kururin dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 24/03/2009, 15h20
  2. Rassemblement des noeuds, maximum et xsl:key
    Par mlny84 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 03/06/2008, 16h19
  3. [XSL][Noob]Compter des noeuds de meme valeur??
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/07/2005, 10h07
  4. xsl ---> filtrage des noeuds avec "not"
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 12/07/2005, 11h26
  5. [XSL] Traiter des balises dans un mixed
    Par Je@nb dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 10/02/2005, 19h14

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