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]renommage récursif balises identiques


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [XSLT]renommage récursif balises identiques
    J’ai un fichier xml que je ne peux traiter que par une transformation xsl et dans lequel j’ai de nombreuses balises <value>.
    Je veux transformer ces balises <value> pour ne plus en avoir une identique dans tout mon document.

    Par exemple, je veux transformer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <HOT id='HOTPAC0050000001' type='HOTRE'>
     	<SOCIETE>
     		<value>HÔTEL BLAIZE</value>
     	</SOCIETE>
      	<TYPE>
     		<value>HEBERGEMENT</value>
     	</TYPE>
    </HOT>
    En :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <HOT id='HOTPAC0050000001' type='HOTRE'>
     	<SOCIETE>
     		<SOCIETEvalue>HÔTEL BLAIZE</value>
     	</SOCIETE>
      	<TYPE>
     		<TYPEvalue>HEBERGEMENT</value>
     	</TYPE>
    </HOT>
    Le document étant très long et changeant, je ne peux pas faire une feuille de style reprenant toutes les balises et j’aimerai automatiser le traitement.

    Pour ce faire j'ai le code ci-dessous sauf que je ne sais pas comment programmer afin que la balise que j'ai appelé <nouvellevalue> fasse ce que je veux : qu'elle prenne le nom de la balise parent suivi de "value" dans le cas de mon exemple précédent mes balises deviennet <SOCIETEvalue> et <TYPEvalue>.
    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="value">
    <nouvellevalue>
    <xsl:apply-templates select="@* | node()"/>
    </nouvellevalue> 
    </xsl:template>
    </xsl:stylesheet>
    Ceci marche mais renomme toutes les <value> en <nouvellevalue> ce qui ne répond pas à mon besoin.
    Etant débutant avec xslt, je me suis formé et j'ai cherché des idées en ligne mais je ne trouve pas de solution, j'en viens donc à me demander si c'est possible. Auriez vous une piste à me proposer?

    Merci d’avance.

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Il suffit de préciser les match des templates

    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: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="SOCIETE/value">
    <SOCIETEvalue>
    <xsl:apply-templates select="@* | node()"/>
    </SOCIETEvalue> 
    </xsl:template>
    <xsl:template match="TYPE/value">
    <TYPEvalue>
    <xsl:apply-templates select="@* | node()"/>
    </TYPEvalue> 
    </xsl:template>
    </xsl:stylesheet>

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette réponse.

    J'aimerai toutefois savoir si il est possible de préciser une seule fois le match avec un ancestor ou autre chose afin de ne pas avoir à préciser le match pour toutes les balises : SOCIETE/value, TYPE/value, ETC.../value :

    Je ne veux pas faire

    <xsl:template match="SOCIETE/value">
    <SOCIETEvalue>
    <xsl:apply-templates select="@* | node()"/>
    </SOCIETEvalue>

    puis

    <xsl:template match="SOCIETE/value">
    <SOCIETEvalue>
    <xsl:apply-templates select="@* | node()"/>
    </SOCIETEvalue>


    mais si je reprends l'idée précédente en 1 seule fois quelque chose comme :

    <xsl:template match="nombaliseparente/value">
    <nombaliseparentevalue>
    <xsl:apply-templates select="@* | node()"/>
    </nombaliseparentevalue>

    où "nombaliseparente" prendrait le nom de la balise parente : ce qui me permettrait de traiter un document très long même si les balises qu'il contient changent.

    Est ce possible?

Discussions similaires

  1. [XSLT] Renommage de balises dans une branche donnée
    Par thepugn1 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 24/11/2010, 17h34
  2. [XSLT] cumuler le contenu de balises identiques
    Par piapia1 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 08/05/2007, 16h07
  3. [XSLT]Sortir les balise d'un namespace d'un XML
    Par virgul dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 12/04/2005, 11h30
  4. balises identiques
    Par Phmichel dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 28/10/2002, 09h18
  5. [Documentation][XSLT][XSLFO]Les balises xslfo
    Par Lydiane dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/08/2002, 11h31

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