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 :

Supprimer certains noeuds vides


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Supprimer certains noeuds vides
    Bonjour,

    J'ai besoin de modifier un fichier XML. En faisant un tour sur Google j'ai cru comprendre que le plus simple pour moi serait d'utiliser un script XSLT.
    Je ne connais pas du tout ce langage et j'avance à tatons. J'aurais donc besoin d'un peu d'aide.

    Voici mon problème : j'ai un fichier XMLdont je dois supprimer certaines nodes vides (je dis bien certaines, car j'ai besoin que certains noeuds soient vides).

    J'ai le fichier XMLsuivant :

    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"?>
    <root>
         <tag1>
            un peu de texte
         </tag1>
         <tag2>
            encore du texte
         </tag2>
         <tag3>
            <tag3child1>test</tag3child1>
    	<tag3child2/>
         </tag3>
    </root>
    Je voudrais vérifier si <tag3child1> et <tag3child2> sont vides, et si c'est le cas les supprimer.
    J'utilise donc le script XSLT suivant :

    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">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
    <xsl:template match="@*|node()">
    	<xsl:copy>
    		<xsl:apply-templates select="@*|node()"/>
    	</xsl:copy>
    </xsl:template>
     
    <xsl:template match="tag3child1|tag3child2">
    	<xsl:if test="normalize-space(string(.)) != ''">
    		<xsl:copy>
    			<xsl:apply-templates select="@*|node()"/>
    		<xsl:copy>
    	</xsl:if>
    </xsl:template>
     
    </xsl:stylesheet>
    Le résultat attendu est donc :

    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"?>
    <root>
         <tag1>
            un peu de texte
         </tag1>
         <tag2>
            encore du texte
         </tag2>
         <tag3>
    	<!-- tag3child1 n'est pas vide, et ne doit donc pas être supprimée, à l'inverse de tag3child2 -->
            <tag3child1>test</tag3child1>
         </tag3>
    </root>
    Or je me retrouve avec ça :

    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"?>
    <root>
         <tag1>
            un peu de texte
         </tag1>
         <tag2>
            encore du texte
         </tag2>
         <tag3>
    	<!-- tag3child2 est bien supprimée, mais j'ai une balise vide tag3child1 qui apparait -->
            <tag3child1>test<tag3child1></tag3child1></tag3child1>
         </tag3>
    </root>
    Je ne comprend pas d'où vient mon erreur.
    Une piste ?

    Par avance merci

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ah, une typo bête. La balise <xsl:copy> que tu ouvres, elle n'est pas fermée correctement. Là c'est comme si tu en ouvrais une deuxième. D'où, je suppose, deux copies et créations de nouvelles balises sans contenu.

    Normalement ton moteur XSLT aurait dû te signaler cette typo. Écrite comme ça, ta feuille XSLT est mal formée, et un moteur XSLT doit la rejeter sans condition, en indiquant comme il peut que le parsing XML a échoué et où. Ce qui t'aurait permis de voir tout de suite ce qui ne va pas.

    Par curiosité, puis-je savoir quel moteur XSLT tu utilises ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Bonjour thelvin,

    Oui effectivement l'erreur venait bien de la typo. Je te remercie pour ton aide.
    Pour répondre à ta question, je suis un peu feignant, j'ai voulu tester mon script XLST ici : http://www.w3schools.com/xsl/tryxslt...file=cdcatalog
    avant de l'intégrer à mon programme Java à l'aide d'un TransformerFactory.

    Travailler avec les bons outils m'aurais probablement évité cette perte de temps ^^

    En tout cas merci, je commençais à tourner en rond.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/01/2014, 21h20
  2. Supprimer un certain noeud dans une variable XML
    Par benthebest dans le forum jQuery
    Réponses: 3
    Dernier message: 30/09/2009, 18h07
  3. [XSLT] Supprimer les noeuds vides
    Par knebhi dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/02/2009, 16h07
  4. [DOM XML] Supprimer un noeud
    Par Musashii dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/06/2005, 11h19
  5. supprimer un enregistrement vide dans une table oracle
    Par shurized dans le forum Bases de données
    Réponses: 11
    Dernier message: 07/09/2004, 16h55

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