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

  1. #1
    Candidat au Club
    Inscrit en
    avril 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : avril 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut [XPATH] [PHP] Noeuds freres qui se suivent selon certains attributs.
    bonjour,
    je programme en php, débutant avec xml/xpath, et je ne trouve pas de réponses à ma question sur les forums.
    Mon problème est le suivant :
    sur le document xml ci-dessous, j'aimerais récupérer tous les textes des "item" dont les cat A B C ou B C, se suivent.
    C'est à dire, dans l'exemple, récupérer et regrouper (data 1, data 2, data 3) ET (data 5, data 6).
    Si quelqu'un a une idée.
    merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	<list>
    		<item cat="A">data 1</item>
    		<item cat="B">data 2</item>
    		<item cat="C">data 3</item>
    		<item cat="0">data 4</item>
    		<item cat="B">data 5</item>
    		<item cat="C">data 6</item>
    	</list>

  2. #2
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : avril 2007
    Messages : 199
    Points : 297
    Points
    297
    Par défaut
    tu veux récupérer tous les textes dont l'attribut 'cat' de la balise item est différent de 0 ?

    comme ca ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="//item[@cat!=0]">
    "Chuck Norris a déjà compté jusqu'à l'infini. Deux fois."

  3. #3
    Candidat au Club
    Inscrit en
    avril 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : avril 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour et merci de t’intéresser au sujet.

    Je voudrais - en php/xpath - récupérer les nœuds qui ont leurs attributs CAT qui se suivent dans cet ordre :
    A suivi de B suivi de C,
    ou B suivi de C seulement...

  4. #4
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : avril 2007
    Messages : 199
    Points : 297
    Points
    297
    Par défaut
    en xpath il faut voir avec la fonction following-sibling (et preceding-sibling)

    mais pour moi ce n'est pas clair ce que tu veux faire : tes attributs sont définis ?, le nombre est fixe ?
    "Chuck Norris a déjà compté jusqu'à l'infini. Deux fois."

  5. #5
    Candidat au Club
    Inscrit en
    avril 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : avril 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Oui, les attributs sont définis et le nombre n'est pas fixe. Je cherche des séquences.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <item cat= A >1</item>
    <item cat= A >2</item>
    <item cat= B >3</item>
    <item cat= C >4</item>
    <item cat= D >5</item>
    <item cat= B >6</item>
    <item cat= C >7</item>
    <item cat= D >8</item>
    je cherche les items dont les "cat se suivent : A, suivi de B, suivi de C
    ou B suivi de C seulement..
    Soit, dans cet exemple : (2,3,4) et (6,7)
    Pas simple, j'ai beau regarder à droite à gauche, je ne trouve rien de probant..

  6. #6
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : avril 2007
    Messages : 199
    Points : 297
    Points
    297
    Par défaut
    tu peux donc le faire avec les 2 fonctions citées, mais à priori il faut définir chaque cas (mais peut etre qqun aura une idée plus optimale ? xpath n'a pas la notion de numérotation alpha ou num ) : "A dont le suivant est B" "B dont le suivant est C", etc...
    Après c'est peut etre plus simple de faire ca en PHP directement
    "Chuck Norris a déjà compté jusqu'à l'infini. Deux fois."

  7. #7
    Candidat au Club
    Inscrit en
    avril 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : avril 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par caballo Voir le message
    tu peux donc le faire avec les 2 fonctions citées, mais à priori il faut définir chaque cas (mais peut etre qqun aura une idée plus optimale ? xpath n'a pas la notion de numérotation alpha ou num ) : "A dont le suivant est B" "B dont le suivant est C", etc...
    Après c'est peut etre plus simple de faire ca en PHP directement
    Oui, j'ai l'impression aussi. Va pour du Php https://www.developpez.net/forums/im...on_biggrin.gif
    Merci pour le conseil.
    Cordialement

  8. #8
    Membre émérite Avatar de tsuji
    Inscrit en
    octobre 2011
    Messages
    1 482
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 482
    Points : 2 599
    Points
    2 599
    Par défaut
    Laissons le support xpath ou xslt complet ou incomplet à part, on parle le xpath et le xslt en soi.

    Le xpath qui identifier le groupe de item avec @cat consécutif (A B C) peut s'écrire comme ça :
    Code xpath : Sélectionner tout - Visualiser dans une fenêtre à part
    "item[@cat='A' and following-sibling::item[1]/@cat='B' and following-sibling::item[2]/@cat='C']"

    Le xpath qui identifier le groupe de item avec @cat consécutif (B C) qui n'est pas du groupe (A B C) peut s'écrire comme ça :
    Code xpath : Sélectionner tout - Visualiser dans une fenêtre à part
    "item[@cat='B' and preceding-sibling::item[1]/@cat!='A' and following-sibling::item[1]/@cat='C']"

    Parlant xslt, on construie ces trois templates au titre d'exemple :
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:template match="item[@cat='A' and following-sibling::item[1]/@cat='B' and following-sibling::item[2]/@cat='C']">
        <value><xsl:value-of select="." /></value>
        <value><xsl:value-of select="following-sibling::item[1]" /></value>
        <value><xsl:value-of select="following-sibling::item[2]" /></value>
    </xsl:template>
     
    <xsl:template match="item[@cat='B' and preceding-sibling::item[1]/@cat!='A' and following-sibling::item[1]/@cat='C']">
        <value><xsl:value-of select="." /></value>
        <value><xsl:value-of select="following-sibling::item[1]" /></value>
    </xsl:template>
     
    <xsl:template match="item" />

    Les sorties seraient :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <value>2</value>
    <value>3</value>
    <value>4</value>
    <value>6</value>
    <value>7</value>

    Voilà tout. Mais voyez-vous ? ce type d'écriture n'est pas de xml
    <item cat= A >1</item>
    Si on ne connaît pas assez encore les dossiers xml, on ne serait pas prêt à faire ce genre de problèmes en xpath et xslt.

  9. #9
    Candidat au Club
    Inscrit en
    avril 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : avril 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    merci pour le temps passé et le mal que vous vous êtes donné.
    Cela peut fonctionner comme vous le mentionner, mais il faut avoir un très bon niveau en xml/xsl... ce qui n'est pas mon cas, hélas.
    Je vais donc rester sur l'idée du php.

    Merci beaucoup.
    Cordialement

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/02/2010, 18h25
  2. [XPATH] noeud frere
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 07/03/2006, 16h31
  3. [AWK] récupération de lignes qui se suivent
    Par PtiNico dans le forum Linux
    Réponses: 2
    Dernier message: 12/04/2005, 19h44
  4. [XPATH] Nombres de noeuds freres ?
    Par DemonKN dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 28/02/2005, 12h29
  5. [PHP-JS] Remplir un tableau javascript selon un tableau php
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2005, 14h02

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