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

XML/XSL et SOAP Discussion :

XSLT : Exportation avec exclusion d'un noeud


Sujet :

XML/XSL et SOAP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 64
    Par défaut XSLT : Exportation avec exclusion d'un noeud
    Bonjour,
    J'ai un fichier xml qui contient des branches "principales" avec des "sous branches".
    Dans un traitement, via une feuille xslt, j'exporte une branche complète (ça c'est facile et ça marche très bien).
    Le "hic", c'est que je voudrais exclure une sous-branche (le nom de la balise est figé : <Info_Sup>).
    Et je ne vois pas comment coder la feuille xsd pour ce faire.
    Auriez-vous des suggestions ?
    Grand Merci d'avance.
    Cordialement.
    Fichier XML en Input
    <Root>
    <Branche_01>
    ...
    <Branche_02>
    <S_Branche_02_01>
    ...
    <S_Branche_02_02>
    ...
    <Info_Sup>
    ...
    </Info_Sup>
    <Branche_03>
    ...
    </Root>
    Feuille XSL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform" target="_blank">http://www.w3.org/1999/XSL/Transform</a>" version="1.0">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     <xsl:template match="/">
       <xsl:for-each select="/Branche_02">
        <xsl:copy-of select="."/>
       </xsl:for-each>
     </xsl:template>
    </xsl:stylesheet>
    Fichier Output actuel
    <Branche_02>
    ...
    <S_Branche_02_01>
    ...
    <S_Branche_02_02>
    ...
    <Info_Sup>
    ...
    </Info_Sup>
    </Branche_02>
    Fichier Output XML souhaité : La sous-branche <Info_Sup> n'est pas prise en compte
    <Branche_02>
    ...
    <S_Branche_02_01>
    ...
    <S_Branche_02_02>
    ...
    </Branche_02>

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Tu ne peux pas utiliser copy-of puisque tu ne veux pas faire une copie parfaite.

    Mais tu peux utiliser ce template :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>
    En mettant juste ça dans un XSLT, ça fait juste une copie conforme du document d'entrée.

    Mais si tu y ajoutes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="/">
      <xsl:apply-templates select="//Branche_02" />
    </xsl:template>
    Tu fais une exception pour la racine, lui disant de faire autre chose qu'une copie conforme d'elle-même. Le autre chose étant de juste contenir le résultat de la transformation de <Branche_02>. Et donc pas <Branche_01> ou <Branche_03>.

    Avec un autre template de ce genre qui fait des exceptions, tu peux demander à ce que <Info_Sup> ne fasse pas une copie de lui-même mais, en fait, ne fasse rien, et donc ne soit pas inclus au résultat.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 64
    Par défaut
    Bonjour,

    SUPER ! Ça fonctionne !
    Merci beaucoup Thelvin.

    Voilà le code final :
    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
     
    <xsl:stylesheet xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform" target="_blank">http://www.w3.org/1999/XSL/Transform</a>" version="2.0">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
     <xsl:template match="/">
        <xsl:apply-templates select="//Branche_02" />
     </xsl:template>
     
     <xsl:template match="Info_Sup">
     </xsl:template>
     
     <xsl:template match="node()|@*">
        <xsl:copy>
           <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
     </xsl:template>
     
    </xsl:stylesheet>
    Merci encore.
    Cordialement.

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

Discussions similaires

  1. XSLT Exporter en CSV avec ligne des nom des champs
    Par AdD92 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 06/05/2014, 16h53
  2. Export avec la création d'un job sous OEM
    Par Bindy dans le forum Entreprise Manager
    Réponses: 17
    Dernier message: 03/07/2008, 22h50
  3. [XSLT ]Problémes avec un Xpath - noeud courant
    Par Mo_Poly dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 01/12/2007, 19h56
  4. Réponses: 2
    Dernier message: 27/09/2007, 14h04
  5. Réponses: 4
    Dernier message: 04/12/2003, 08h12

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