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][PHP5] Récuperer la valeur d'un attribut


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Par défaut [XPath][PHP5] Récuperer la valeur d'un attribut
    Bonjour,
    Je cherche desesperement un moyen de faire une selection sur un element afin de recuperer d'autres elements mais surtout la valeur d'un attribut...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <Images>
    <Img id="1" chem="/Tofs/00042813.jpg"  dateI="AAAAMMJJ">
    		<Infos consultable="0">
    			<Titre>Premiere</Titre>
    			<Themes>
    				<th>Chimie</th>
    				<th>Biologie</th>
    				<th>Materiaux</th>
    			</Themes>
                    </Infos>
    </Img>
    </Images>
    Par exemple ici je souhaite obtenir la valeur des attributs "chem" et "dateI" de tous les élements qui ont un "th" qui a pour valeur "Chimie", ainsi que le "titre".

    La requete /Images/Img/@chem retourne les valeurs de tous mes attributs "chem" , comment filtrer le resultat avec la condition que Themes/th contienne "Chimie" ?

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	<xsl:template match="//th">
     
    		<xsl:if test="contains(text(),'Chimie')">
    		<xsl:value-of select="ancestor::Img/@chem"/>
     
    		</xsl:if>
     
    	</xsl:template>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Par défaut
    Il se trouve que j'ai besoin de cette requête xpath pour un code en php5... Sans utiliser de xsl ce n'est pas possible ?

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Img[.//Themes/th="Chimie"]/@chem
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Par défaut
    Citation Envoyé par Swoög
    essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Img[.//Themes/th="Chimie"]/@chem
    Merci Swoog !! C'est exactement ce que je cherchais

    Petite précision : pour obtenir par exemple les titres correspondants je fais :
    //Img[.//Themes/th="Chimie"]/@chem|//Img[.//Themes/th="Chimie"]//Titre

    Est-ce la seule solution de combiner les selections en répetant la condition ou y a t'il un raccourci dans le cas d'un grand nombre d'élements à selectionner ?

    2eme question Est-il possible de combiner les conditions ? //Img[.//Themes/th="Chimie"]/@chem |//Img[.//Titre="Premiere"] ca passe pas

  6. #6
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    Citation Envoyé par laetyboop
    2eme question Est-il possible de combiner les conditions ? //Img[.//Themes/th="Chimie"]/@chem |//Img[.//Titre="Premiere"] ca passe pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Img[Infos/Themes/th = 'Chimie' and Infos/Titre = 'Premiere']/@chem
    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

  7. #7
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    Pour ce qui touche à XPath, j'utilise XPath Explorer :
    http://www.purpletech.com/xpe/

    Plug-in Eclipse et NetBeans, jar, etc.

    cet outil est très pratique pour tester ces requetes XPath

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Par défaut
    Ouaaa j'adore xpath !!
    Devant la pertinence de vos réponses .. je continu :

    Lorsque que plusieurs élements doivent être retournés, par exemple ici les @chem ET les titres correspondants , qui ont un theme "Chimie"

    Je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Img[.//Themes/th="Chimie"]/@chem|//Img[.//Themes/th="Chimie"]//Titre
    Le résultat est :
    Tofs/00042813.jpg
    Premiere
    Tofs/00042819.jpg
    titre

    Comment associer un chem à un titre en sachant que le titre n'est pas un champ obligatoire ? C'est à dire que pour l'instant j'imbrique des foreach en séparant la requete en 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Img[.//Themes/th="Chimie"]/@chem
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Img[.//Themes/th="Chimie"]//Titre
    et j'associe ensuite les indices des 2 tableaux qui stockent les resultats de chaque requete. Seulement dans le cas ou un titre est vide ca décale tout !!

    C'est quoi l'astuce

  9. #9
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    je pense que le mieux serait de s'arretter au niveau du dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Img[.//Themes/th="Chimie"]
    puis faire tes traitements sur les résultats de ça... c'est peut-être plus simple et ça évitera le bug du titre vide ^^
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Par défaut
    Citation Envoyé par Swoög
    je pense que le mieux serait de s'arretter au niveau du dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Img[.//Themes/th="Chimie"]
    puis faire tes traitements sur les résultats de ça... c'est peut-être plus simple et ça évitera le bug du titre vide ^^

    Effectivement c'est alléchant ! mais je ne comprend pas justement comment faire les traitements à partir du résultat de cette requete au niveau au dessus, car

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml->xpath('//Img[.//Themes/th="Chimie"]')
    retourne un Array vide

    Continu à combler mon inculture Swoog !!

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Par défaut
    Alors quelqu'un sait si y'a un moyen de traiter les resultats d'une requete xpath du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     //Img[.//Themes/th="Chimie"]
    en Php5 ?

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/03/2009, 21h18
  2. Filtrer sur une valeur d'un attribut XPATH
    Par jbnoel dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 31/01/2008, 10h00
  3. [XPATH] Selectionner un noeud selon la valeur de son attribut
    Par Gregco dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 29/10/2007, 15h34
  4. Réponses: 11
    Dernier message: 12/04/2007, 12h28
  5. [XPath]fonction récupérer plus grand valeur d'un attribut ?
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 18/05/2006, 14h27

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