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] XML vers XML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 145
    Points : 180
    Points
    180
    Par défaut [XSLT] XML vers XML
    Bonjour,

    petite question aux spécialistes XML/XSL.
    Je dispose d'un fichier XML de base que je souhaite filtrer pour écriture dans un nouveau fichier XML.
    Le filtrage se résume à la suppression de certain noeud dans le document XML de base.
    Est-il possible avec une feuille XSL de proceder à un un tel filtrage ? et si oui, comment ?

    Merci d'avance,

  2. #2
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    Salut,

    Oui, et c'est d'ailleurs le principe de l'utilisation des feuilles XSL.

    Avec, par exemple, des xsl-copy tu peux récupérer les noeuds que tu dois garder...

    A+

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 145
    Points : 180
    Points
    180
    Par défaut
    D'accord, jusque là j'y étais, il faut utiliser xsl-copy. Mais j'aurai besoin d'un chti exemple au niveau de la construction de la feuille XSL.
    J'explicite mon cas :

    voilà mon fichier XML de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
    <toto>
    	<titi>
    		<a>aaa</a>
    		<b>bbb</b>
    		<c>ccc</c>
    	</titi>
    	<tutu>
    		<tata>grehut</tata>
    	</tutu>
    	<mickey>mouse</mickey>
    </toto>

    et voilà celui que je souhaite obtenir (à savoir le même, moins les noeud <b> et <tutu>)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8"?>
    <toto>
    	<titi>
    		<a>aaa</a>
    		<c>ccc</c>
    	</titi>
    	<mickey>mouse</mickey>
    </toto>

    merci de me donner un exemple de feuille de style pour réaliser ce genre de chose.

  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,

    le principe est le suivant :
    - pour les noeuds que tu veux recopier sans recopier tous leurs descendants, tu utilises <xsl:copy> dans leur template et un template vide pour les descendants à ne pas recopier ;
    - pour les branches entières que tu veux recopier, tu utilises <xsl:copy-of> dans le template de l'élément ancètre

    Pour ton exemple, ca donne :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">
        <xsl:apply-templates/>
      </xsl:template>
     
      <xsl:template match="toto">
        <xsl:copy>
          <xsl:apply-templates/>
        </xsl:copy>
      </xsl:template>
     
      <xsl:template match="titi">
        <xsl:copy>
          <xsl:apply-templates/>
        </xsl:copy>
      </xsl:template>
     
      <xsl:template match="a">
        <xsl:copy-of select="."/>
      </xsl:template>
     
      <xsl:template match="c">
        <xsl:copy-of select="."/>
      </xsl:template>
     
      <xsl:template match="mickey">
        <xsl:copy-of select="."/>
      </xsl:template>
     
      <!-- Les éléments à ne pas recopier -->
      <xsl:template match="b"/>
      <xsl:template match="tutu"/>
     
    </xsl:stylesheet>
    Si tu as également des attributs à recopier, tu dois ajouter des <xsl:apply-templates select="@*"> et un <template match="@*"> pour les traiter spécifiquement ; tu trouveras plus de précision en cherchant dans ce forum
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 145
    Points : 180
    Points
    180
    Par défaut
    merci de ton éclairage, oh membre éclairé !

Discussions similaires

  1. [XSLT]XML vers XML avec des transformations de texte au passage
    Par samcsharpandco dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 27/11/2007, 17h15
  2. [XSLT]retour charriot xml vers html
    Par toma22 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/10/2007, 19h07
  3. [XSLT] XML vers XML
    Par cydream dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/04/2007, 17h45
  4. [XSLT] processeur pour une transformation XML vers XML
    Par fanette dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 15/06/2006, 12h46
  5. [XSLT] transformation xml vers xml
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2006, 11h02

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