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 :

Filtrer un fichier XML


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Analyste-Développeur BI
    Inscrit en
    Mai 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Développeur BI

    Informations forums :
    Inscription : Mai 2011
    Messages : 61
    Par défaut Filtrer un fichier XML
    Bonjour à tous,

    Je débute complètement en XLS mais je n'arrive pas encore à en voir toutes les possiblités.
    En particulier je voudrais savoir s'il est possible de s'en servir pour modifier un fichier XML par exemple en masquant certaine balises.

    Pour donner un exemple concret :
    Je voudrai masquer les données de la balise <Marque> si dans la balise <Catégorie> je retrouve la avleur "laitage".

    Donc voilà, si quelqu'un a une idée de tout ça, merci pour vos réponses!

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Quelque chose comme ça pour vous donner une idée comment ça pourrait se faire.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="Marque[parent::Catégory]">
        <xsl:copy>
            <xsl:copy-of select="@*" />
            <xsl:value-of select="'******'" />
        </xsl:copy>
    </xsl:template>
    Le template va se placer dans un xsl de transformation identique si on veut préserver le reste.

  3. #3
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    En re-lisant cette ligne
    Je voudrai masquer les données de la balise <Marque> si dans la balise <Catégorie> je retrouve la avleur "laitage".
    je pourrais la mal comprendre: j'entendais la balise Marque soit dans la balise Catégorie et la balise Marque a une valeur laitage comme ça:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Catégorie>
        <!-- etc etc... -->
        <Marque>laitage</Marque>
        <!-- etc etc... -->
    </Catégorie>

    Mais en la re-lisant, vous pourriez plutôt l'entendre par quelque structure comme ça.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <quelqueParent>
        <!-- etc etc... -->
        <Catégorie>laitage</Catégorie>
        <!-- etc etc... -->
        <Marque>quelque valeur à masquer</Marque>
        <!-- etc etc... -->
    </quelqueParent>

    Si c'est ça, j'entends faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="Marque[parent::*/Catégory='laitage']">
        <xsl:copy>
            <xsl:copy-of select="@*" />
            <xsl:value-of select="'******'" />
        </xsl:copy>
    </xsl:template>
    Voilà!

  4. #4
    Membre confirmé
    Femme Profil pro
    Analyste-Développeur BI
    Inscrit en
    Mai 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Développeur BI

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

    Merci beaucoup pour la réponse, ça me donne une vraie piste!
    Effectivement, ma situation correspond plutôt au deuxième cas, voici un exemple simplifié pour un produit en sachant que mon fichier XML en contient plusieurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <produit>
      <description>
        <nom>yahourt X</nom>
        <categorie>laitage</categorie>
      </description>
      <commercial>
        <marque> Danone</marque>
        <distributeur>XXX</distributeur>
      </commercial>
    </produit>

    En adapatant votre code, voici ce que j'ai dans mon XSL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="liste/produit/commercial[parent::*/description/categorie='laitage']">
      <xsl:copy>
        <xsl:copy-of select="@*" />
        <xsl:value-of select="'******'" />
      </xsl:copy>
    </xsl:template>

    Mon premier problème est que je n'arrive pas à atteindre seulement la marque. J'ai essayé différentes syntaxes dans le xsl:template mais je n'y arrive pas.

    Et le second est que je voudrais avoir en retour mon fichier xml avec les balises, pas seulement les données, donc j'imagine que c'est au niveau du xsl:value_of_select qu'il faudrait modifier quelque chose mais je ne vois pas encore quoi...

    Merci pour votre aide.

  5. #5
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Vous pouvez le faire comme ça et, comme dit, plaçez le template travailleur à côté d'une transformation identique.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:template match="*|@*|text()">
        <xsl:copy>
            <xsl:apply-templates select="*|@*|text()" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="marque[normalize-space(ancestor::*[2]/description/categorie)='laitage']">
        <xsl:copy>
            <xsl:copy-of select="@*" />
            <xsl:value-of select="'*******'" />
        </xsl:copy>
    </xsl:template>
    J'ai ajouté aussi quelque rafinement si ça vous inspire.

Discussions similaires

  1. Filtrer un fichier XML à l'aide d'un tableau
    Par LaBastoss dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 26/05/2011, 18h11
  2. [XSLT] Filtrer certaines balises d'un fichier XML
    Par arthix dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 07/07/2006, 12h21
  3. filtrer un fichier xml
    Par nemya dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/02/2006, 13h58
  4. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29

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