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 de balises dans une branche donnée


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Par défaut [XSLT] Renommage de balises dans une branche donnée
    Bonjour,
    je débute en XSL et je n'ai pas trouvé de solution à mon probleme pourtant tres basique.
    J'ai un xml en entrée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    	<oui>
    		<ancien>1</ancien>
    	</oui>
    	<non>
    		<ancien>8</ancien>
    	</non>
    </root>
    A l'aide d'un XSL , je veux renommer toutes les balises <ancien> en <nouveau> uniquement dans les branches qui contiennent "oui"

    Mon xsl qui ne marche 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
    15
    16
    17
    18
     
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
        <xsl:template match="*">
            <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:apply-templates />
            </xsl:copy>
        </xsl:template>
     
          <xsl:template match="ancien">
            <xsl:if test= "contains(current(),'oui'))">  -- Syntaxe à affiner
               <xsl:element name="nouveau"> <xsl:value-of select="ancien"/> </xsl:element>
            </xsl:if>   
          </xsl:template>
     
     </xsl:stylesheet>
    Je précise que le renommage doit fonctionner sur n'importe qu'elle balises <ancien> dans n'importe quelle branche contenant 'oui'.

    Je n'ai peut etre pas pris le problème de la bonne façon.

    Merci de votre aide.

    YB

  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 : 48
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    la syntaxe est plus qu'a affiner

    c'est le père d'ancien que tu souhaite tester, et pour cela tu peux le faire via la template
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="oui/ancien">
     
               <xsl:element name="nouveau"> <xsl:value-of select="."/> </xsl:element>
     
          </xsl:template>

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Par défaut Pas exactement ce que je voudrais
    Merci pour cette réponse meme si elle ne répond exactement à mon besoin.

    Cette solution ne marche pas si on a des balises "anciens" placées comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    /oui/toto1/toto2/ancien
    Mon exemple n'était peut etre pas assez explicite.

    Je veux renommer quand la branche contient 'oui' quelque soit l'emplacement de la balise initiale.

    J'ai tenté une nouvelle 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
     
    <xsl:template match="node()">
    		<xsl:copy>
    			<xsl:apply-templates select="node()|@*"/>
    		</xsl:copy>
    	</xsl:template>
     
    	<xsl:template match="@*">
    		<xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>
    	</xsl:template>
     
    	<xsl:template match="oui">
    	<xsl:element name="nouveau"> <xsl:value-of select="."/> </xsl:element>	
    	</xsl:template>
    Le probleme est que le résultat donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <root><nouveau>1</nouveau><non><ancien>8</ancien></non></root>
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <root><oui><nouveau>1</nouveau></oui><non><ancien>8</ancien></non></root>
    Autrement dit il me permet la balise parent.

    Merci d'avance.

    YB
    Merci.

  4. #4
    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
    Comme ça, alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="oui//ancien">
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Par défaut Genial !
    Merci beaucoup ça marche !

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

Discussions similaires

  1. [XSLT] écrire des attribut dans une balise
    Par DrDam dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/04/2008, 13h12
  2. [XSLT]Recuperer valeur concatenee dans une balise
    Par e_peigne dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/10/2006, 13h49
  3. [XSL]faire une balise dans une balise??? (ComboBox)
    Par rastoix dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/05/2003, 08h34
  4. [XSLT] inclure du XSL dans une balise html
    Par iaa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/08/2002, 15h57

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