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] Suppression des éléments sans contenu.


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [xslt] Suppression des éléments sans contenu.
    Je souhaiterais supprimer par une transformation XSL tous les noeuds dont ni eux-mêmes, ni leurs descendants, ne contiennent de noeuds texte, ou de valeurs d'attributs.

    Exemple source :

    <racine>
    <element1>
    <element1a />
    <element1b attribut="" />
    </element1>
    <element2>
    <element2a />
    <element2b attribut="" />
    <element2c attribut="une valeur" />
    <element2d>Texte</element2c>
    <element2>
    </racine>


    Exemple résultat après transformation

    <racine>
    <element2>
    <element2c attribut="une valeur" />
    <element2d>Texte</element2c>
    <element2>
    </racine>

    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,

    Bienvenue sur développez !

    Connais-tu les base de XML?
    si non je t'invite à aller voir ici pour comprendre les bases:

    ftp://ftp-developpez.com/xml/XML-office_2003.pdf

    As-tu déjà commencé ton XSL? si oui post le aussi
    afin qu'on puisse t'aider pour ce qu'il te manque à faire!


    ++

    Thierry

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [xslt] Suppression des éléments sans contenu.
    Au temps pour moi, j'ai commis deux étourderies dans mon XML, les développeurs expérimentés auront corrigé d'eux-mêmes.

    1 - Oui, je connais le XML, et bien plus que les bases.

    2 - Le seul XSL dont j'ai besoin, c'est celui qui permet d'obtenir la transformation indiquée ci-dessous.

    Je souhaiterais supprimer par une transformation XSL tous les noeuds dont ni eux-mêmes, ni leurs descendants, ne contiennent de noeuds texte, ou de valeurs d'attributs.

    Exemple source :

    <racine>
    <element1>
    <element1a />
    <element1b attribut="" />
    </element1>
    <element2>
    <element2a />
    <element2b attribut="" />
    <element2c attribut="une valeur" />
    <element2d>Texte</element2d>
    </element2>
    </racine>


    Exemple résultat après transformation

    <racine>
    <element2>
    <element2c attribut="une valeur" />
    <element2d>Texte</element2d>
    </element2>
    </racine>

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    peut-être que ceci devrait convenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?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="*">
    		<xsl:if test=".//@*[normalize-space(.) != ''] or normalize-space(text()) != ''">
    			<xsl:copy>
    				<xsl:copy-of select="@*"/>
    				<xsl:apply-templates select="*"/>
    			</xsl:copy>
    		</xsl:if>
    	</xsl:template>
     
    </xsl:stylesheet>

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [xslt] Suppression des éléments sans contenu.
    Merci beaucoup GrandFather, voici une réponse très pertinente, et précieuse.

    J'ai testé immédiatement ce code et j'obtiens :

    <racine>
    <element2>
    <element2c attribut="une valeur"></element2c>
    <element2d></element2d>
    </element2>
    </racine>

    au lieu de :

    <racine>
    <element2>
    <element2c attribut="une valeur"></element2c>
    <element2d>Texte</element2d>
    </element2>
    </racine>


    La valeur ("une valeur") de l'attribut "attribut" est préservée, mais la valeur ("Texte") de l'élément "element2d" n'a pas été copiée. Pourrais-je avoir un indice sur le moyen de conserver le contenu des éléments ?

    Merci encore.

  6. #6
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Au temps pour moi, le problème vient de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="*"/>
    Avec la requête XPath "*", Je demande d'appliquer les templates pour les éléments enfants, et je ne traite donc pas les noeuds textuels enfants, ce qui fait qu'on ne les retrouve pas en sortie. Il faut appliquer les templates pour tous les noeuds enfants, quels que soit leurs types, pour cela il suffit de ne pas préciser de requête XPath :

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci encore pour cette intervention magistrale.

Discussions similaires

  1. [ComboViewer] Suppression des éléments.
    Par tatemilio2 dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 25/03/2008, 12h58
  2. [XSLT] Dupliquer un élément sans un enfant
    Par christianlavallee dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/10/2007, 19h48
  3. [XSLT] Suppression des zéros à gauche d'un nombre
    Par stepd dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/03/2007, 10h32
  4. [XSLT] Suppression des retours charriots
    Par Hoegaarden dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/08/2005, 16h51

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