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] Supprimer les noeuds vides


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut [XSLT] Supprimer les noeuds vides
    Bonjour,

    J'ai un fichier Xml qui se présente sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <article>
     
    <phrase>
     
    <p>Le chat est noir</p>
    </phrase>
     
    <phrase>
     
    <p></p>
    </phrase>
     
    </article>


    Je souhaiterai supprimer les noeuds vides. En effet, j'utilise la fonction
    Xsl:choose
    pour supprimer les balises sans texte et cela me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <article>
     
    <phrase>
     
    <p>Le chat est noir</p>
    </phrase>
     
    <phrase>
     
     
    </phrase>
     
    </article>
    Le problème est que je n'arrive pas à supprimer les noeuds parents vides qui sont ici "<phrase>"

    Voilà le code XSL pour engendrer la transformation :

    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:template match="*">
                <xsl:choose>
     
                    <!--SI la balise contient du texte on recopie les noeuds-->
                    <xsl:when test="* | text ()">
                        <xsl:copy>
     
                            <xsl:apply-templates select="@*|node()"/>
     
                        </xsl:copy>
                    </xsl:when>
     
                    <!--Sinon-->
                  <xsl:otherwise>
                      <xsl:comment>NETTOYAGE BALISE VIDE <xsl:apply-templates select="@*|node()"/></xsl:comment>
                  </xsl:otherwise>
                </xsl:choose>
     
        </xsl:template>

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Essaye de faire:

    <xsl:if test="text()|@*"

    <xsl:apply-templates select="@*|node()"/>

    </xsl:if>

    Pas testé

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut
    j'ai fait comme cela :
    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
    <xsl:template match="*">
                <xsl:choose>
     
                    <!--SI la balise contient du texte on recopie les noeuds-->
                    <xsl:when test="* | text ()">
                        <xsl:copy> 
                            <xsl:apply-templates select="@*|node()"/>
                        </xsl:copy>
                    </xsl:when>
     
                    <!--Sinon-->
                  <xsl:otherwise >
                      <xsl:apply-templates select="node()"/>  
                  </xsl:otherwise>
                </xsl:choose>
     
        </xsl:template>
    cela fonctionne en ajustant quelques paramètres (cas ou on a des balises vides dans un noeud parent vide)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/01/2014, 21h20
  2. [XSLT] Supprimer les caractères spéciaux HTML d'un noeud texte
    Par Invité dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 25/12/2008, 22h59
  3. [JDOM] Supprimer les noeuds fils
    Par calimero2611 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 04/07/2006, 13h31
  4. Réponses: 2
    Dernier message: 04/05/2006, 13h10
  5. supprimer les lignes vides?
    Par VinnieMc dans le forum Langage
    Réponses: 5
    Dernier message: 27/02/2006, 14h01

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