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 :

Filtrage dans un document XML à l'aide d'un fichier XSLT


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Points : 32
    Points
    32
    Par défaut Filtrage dans un document XML à l'aide d'un fichier XSLT
    J'ai un petite question concernant le filtrage d'un document XML à l'aide de XSLT. Dans l'exemple ci-dessous, j'aimerais filtrer le fichier pour que seulement les éléments contenant la lettre "a" se retrouvent dans le fichier XML sortant.

    Exemple simple :

    Fichier XML entrant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0"  ?>
    <?xml-stylesheet href="monfichier.xsl" type="text/xsl" ?>
    <a>
    <ab x="x"><b>Exemple Simple</b><a>z</a></ab>
    <z x="x"><a>z</a></z>
    </a>
    Fichier XML sortant désiré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <a>
    <ab x="x"><a>z</a></ab>
     
    </a>
    Quel serait le code du fichier XSLT qui pourrait réaliser cette tâche?

    Merci pour votre aide! :-)


    Sebastian d'Alger

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    L'idée c'est qu'il faut deux cas, disons deux templates :

    - un qui dit ce qu'on fait aux éléments qui contiennent un a : on les copie, eux et leur texte, et on applique les règles à leurs éléments,
    - un qui dit ce qu'on fait aux autres : rien. On les ignore.

    Donc :

    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
    <!-- Ceux qui contiennent a -->
    <xsl:template match="*[contains(name(), 'a')]">
      <!-- On copie l'élément -->
      <xsl:copy>
        <!-- On copie ses attributs -->
        <xsl:copy-of select="@*"/>
        <!-- On applique les règles à tout ce qu'il contient (par défaut les textes sont copiés.) -->
        <xsl:apply-templates/>
      </xsl:copy>
    </xsl:template>
     
    <!-- Les autres -->
    <xsl:template match="*">
      <!-- On laisse vide. C'est surtout utile pour que leurs textes ne soit pas copié. Par défaut ils l'auraient été. -->
    </xsl:template>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Super! Merci pour ce code. Maintenant, j'aimerais savoir si c'est possible de filtrer sans utiliser ***"xsl:copy" mais seulement "xsl:element" ? De quoi aurait l'air le code seulement avec "xsl:element"?

    Merci encore!

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Dans les cas simples, quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:element name="{name()}">
      <!-- même chose qu'avec <xsl:copy> -->
    </xsl:element>
    Du coup je vois pas bien l'intérêt de préférer xsl:element.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [DOM] Créer Element dans un document XML
    Par nivose110 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 30/06/2006, 09h18
  2. Réponses: 4
    Dernier message: 09/05/2006, 11h33
  3. Sauver un TStream dans un document XML
    Par srvremi dans le forum Composants VCL
    Réponses: 4
    Dernier message: 07/10/2004, 13h17
  4. recherche dans un document xml via DOM
    Par ndoye_zaff dans le forum APIs
    Réponses: 5
    Dernier message: 11/06/2003, 14h44
  5. Stocker du texte mis en forme dans un document XML
    Par ovh dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 13/02/2003, 10h23

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