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 des balises d'un fichier XML via XSLT


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 24
    Par défaut Supprimer des balises d'un fichier XML via XSLT
    Bonjour à tous,

    Je possède un fichier XML de la forme :

    <personne>
    <nom>toto</nom>
    <prenom>NA</prenom>
    <age>19</age>
    <taille>170</taille>
    <ville>NA</ville>
    </personne>

    et je voudrai faire un template qui me permette de supprimer les lignes où la valeur de la balise est "NA".
    Donc en gros en sortie je devrai avoir le fichier XML suivant :

    <personne>
    <nom>toto</nom>
    <age>19</age>
    <taille>170</taille>
    </personne>

    Si quelqu'un à une idée je suis preneur ^^

    D'avance merci pour vos réponses.

    Cordialement

    La Bastoss

  2. #2
    Membre expérimenté Avatar de Mamypirate
    Homme Profil pro
    Samouraï
    Inscrit en
    Mai 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Samouraï
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2011
    Messages : 108
    Par défaut
    Bonjour,

    Tu peux essayer comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:stylesheet>
     
    	<xsl:template match="*[text()!='NA']">
    		&lt;<xsl:value-of select="local-name(.)"/>&gt;
    		<xsl:apply-templates/>
    		&lt;/<xsl:value-of select="local-name(.)"/>&gt;
    	</xsl:template>
     
    	<xsl:template match="*"></xsl:template>
     
    </xsl:stylesheet>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 24
    Par défaut
    Merci cela fonctionne. ^^

    Cordialement

    La Bastoss.

  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
    Je conseille plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:stylesheet>
     
      <xsl:template match="*[string(.) != 'NA']">
        <xsl:copy>
          <xsl:copy-of select="@*"/>
          <xsl:apply-templates/>
        </xsl:copy>
      </xsl:template>
    
      <xsl:template match="*"></xsl:template>
    	
    </xsl:stylesheet>
    - &lt;<xsl:value-of select="local-name(.)"/>&gt; n'est pas censé fonctionner, non -_-°. Si ça fait vraiment ce qui était demandé, c'est un bug du moteur XSLT. Avec ceux que j'utilise et qui sont largement reconnus, ça ne fait pas ce qui était demandé.
    Pour copier un élément, mieux vaut utiliser xsl:copy.
    Ou au pire, xsl:element, si on comprend pas xsl:copy.

    - <xsl:copy-of select="@*"/> copiera les éventuels attributs de l'élément.

    - string(.) au lieu de text() permettra de convertir le contenu de l'élément en cours en une string, et après on vérifie si cette string est égale à 'NA' ou pas. text() sélectionne uniquement les nœuds textes enfants. S'il n'y en a pas, donc si l'élément est vide, text() renvoie l'ensemble vide et l'ensemble vide n'est différent de rien, donc pas de NA non plus. C'est peut-être acceptable, mais ce n'était pas dans le cahier des charges . Et de toute façon c'est pas prudent.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre expérimenté Avatar de Mamypirate
    Homme Profil pro
    Samouraï
    Inscrit en
    Mai 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Samouraï
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2011
    Messages : 108
    Par défaut
    Effectivement xsl:copy-of semble beaucoup plus "propre" ! Bon à savoir merci

  6. #6
    Membre expérimenté
    Avatar de VforVincent
    Homme Profil pro
    Doctorant (EPUB 3.0)
    Inscrit en
    Avril 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Doctorant (EPUB 3.0)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 115
    Par défaut
    Pourquoi chercher compliqué ? On veut supprimer l'élément qui contient NA c'est bien ça ?

    Alors tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="*[string(.) != 'NA']"/>
    Il n'y a pas de sous-éléments, puisque apparemment il s'agit d'une structure plate. En proposant un template vide, j'efface complètement l'élément. J'obtiens ce que Mamypirate demande.

    Qu'est-ce que tu en penses thelvin ?

Discussions similaires

  1. [WD18] Supprimer des lignes dans un fichier xml
    Par cid5420 dans le forum WinDev
    Réponses: 26
    Dernier message: 10/04/2014, 10h04
  2. Format des balise dans un fichier XML
    Par Caillou63 dans le forum C#
    Réponses: 2
    Dernier message: 03/05/2010, 11h10
  3. [PHP 4] Extraire des données d'un fichier xml via xsl et xpath
    Par fraisa1985 dans le forum Langage
    Réponses: 1
    Dernier message: 12/01/2010, 10h23
  4. Réponses: 9
    Dernier message: 18/05/2009, 08h25
  5. awk- supprimer des balises d'un fichier XML
    Par joeyd dans le forum Linux
    Réponses: 1
    Dernier message: 06/11/2007, 11h28

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