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 :

[XPath] cibler les noeuds avec apply-templates


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    yos
    yos est déconnecté
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Points : 60
    Points
    60
    Par défaut [XPath] cibler les noeuds avec apply-templates
    Bonjour,
    dans un <xsl:template matche=doc>
    j'appliquer un apply-template sur les descendants du noeud courant dont le nom est "cible" (qui contient lui même des sous elements)
    pour ce faire j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="../doc//cible"/>
    ? es correct d'ecrire aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="descendant::cible"/>
    maintenant je voeux faire le contraire c t'a dire tous sauf cible
    que faire?
    j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="*[not(self::cible)]"/>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="descendant::node()[not(self::cible)]"/>
    ça ne fonctionne pas
    merci pour votre aide

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    ca c'est faux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="../doc//cible"/>
    Ca peur marcher dans un cas particulier (1 seul doc) mais ce serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="current()//cible"/>
    c'est descendant-or-self:: l'equivalent de //


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="current()//*[not(self::cible)]"/>
    devrait fonctionner

  3. #3
    yos
    yos est déconnecté
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Points : 60
    Points
    60
    Par défaut
    Bonjour,
    Merci Erwy pour ta réponse
    Avec un exemple ce serait plus claire

    un exemple XML
    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
    <?xml version="1.0"?>
    <source>
    <document>
    	<doc>
    		<cible>
    			<SOUScible1>cible-texte1</SOUScible1>
    			<SOUScible2>cible-texte2</SOUScible2>
    		</cible>
    	</doc>
    	<doc>
    		<cible>
    			<SOUScible1>2emeCible-texte1</SOUScible1>
    			<SOUScible2>2emeCible-texte2</SOUScible2>
    		</cible>
    		<NOTcible>
    			<sousNOTcible>contenu1</sousNOTcible>
    			<sousNOTcible>contenu2</sousNOTcible>
    	    </NOTcible>
    	</doc>
    </document>
    </source>
    Voici l'XSLT
    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
    <?xml version='1.0'?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.0 Transitional//EN" doctype-system="http://www.w3.org/TR/REC-html40/loose.dtd"/>
    <xsl:template match="/">
    	<xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="document">
    	<table border="1">
    	 <xsl:apply-templates select="../document//cible"/>
    	</table>
        <!--<xsl:apply-templates select="current()//*[not(self::cible)]"/>-->
    </xsl:template>
     
    <xsl:template match="cible">
    	<tr>		
    	  <xsl:apply-templates/>		
    	</tr>
    </xsl:template>
    <xsl:template match="SOUScible1">
    	<td>		
    	  <xsl:value-of select="."/>		
    	</td>
    </xsl:template>
    <xsl:template match="SOUScible2">
    	<td>		
    	  <xsl:value-of select="."/>		
    	</td>
    </xsl:template>
     
    <xsl:template match="NOTcible">
     <h4><xsl:value-of select="."/></h4>
    </xsl:template>
     
    </xsl:stylesheet>
    c'est OK pour avoir les noeuds <cible> en utilisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="../document//cible"/>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="current()//cible"/>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="descendant::cible"/>
    mais c'est le contraire qui pause problème
    même avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="current()//*[not(self::cible)]"/>
    merci pour votre aide

Discussions similaires

  1. [JDOM] Problème pour lire les noeuds avec JDOM
    Par Eclix dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 26/05/2014, 18h11
  2. [XPATH] Obtenir les noeuds parents
    Par ggptggpt dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/02/2008, 22h39
  3. [XPath] reconnaitre les noeuds feuilles de l'abre Dom
    Par kkwet30 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/02/2008, 12h47
  4. [XSLT] problème avec apply-templates
    Par ploxien dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 01/11/2006, 11h20
  5. [XSLT] Problème avec apply-templates
    Par NeoMan dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/12/2005, 14h45

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