DATA et xml parcourir sous groupe

Bonjour,

Soit un fichier xml bien formé (genre annuaire) qui a a peu près cette structure:

groupes
  groupe
   libelle
   adresse
   code_postal
   contacts
    contact
     identite
     tel
    contact
     identite
     tel
  groupe
   .... etc

Je parcours sans trop de difficulté le fichier avec une boucle data à son niveau 1

<BOUCLE_niv1 (DATA) {source simplexml, http://urlvers/syndic.xml} {datapath root/children/groupe}>

Mon problème est que je voudrai parcourir un 2nd niveau constitué des contacts. Si par ex je fais:

<BOUCLE_niv2 (DATA) {source simplexml, http://urlvers/syndic.xml} {datapath root/children/groupe/4/children/contacts/0/children/contact}>

J'obtiens bien la liste des contacts du 4ème groupe, donc ça marche, la syntaxe semble correcte

Mon idée était d'imbriquer _niv2 dans _niv1 et de remplacer "4" par "#CLE" ou "#_niv1:CLE" ou via un #SET et #GET pour obtenir pour chaque groupe la liste des contacts attachés, qui sont bien sûr en nombre variable ... un truc du genre:

<BOUCLE_niv2 (DATA) {source simplexml, http://urlvers/syndic.xml} {datapath root/children/groupe/#_niv1:CLE/children/contacts/0/children/contact}>

Hélas, quoique j'essaye, je me retrouve avec la liste des contacts du groupe 0, c'est à dire que #CLE ou tout autre syntaxe me retourne 0, donc j'ai toujours les contacts du groupe 0.

Est-ce que ça n'est pas la bonne méthode (l'imbrication des boucles), cela veut dire que je ne peux pas mettre une balise spip dans le critère datapath ... Une idée sur la méthode pour retrouver pour chaque groupe ses contacts à lui et seulement ceux-là quel que soit leur nombre ?

Merci d'avance à qui aura une bonne idée !

Pierre.

Je tenterais bien avec un #COMPTEUR_BOUCLE, mais à mon avis ça marchera pas :slight_smile:

Bonjour,

Le 24/09/2015 12:19, Gilles Vincent a écrit :

Je tenterais bien avec un #COMPTEUR_BOUCLE, mais à mon avis ça marchera
pas :slight_smile:

J'avais tenté aussi, ça ne marche pas ... vraiment bizarre, je ne comprends pas comment on parcours ces 2ème niveau d'arborescences XML avec des quantités variables d'objets.

2015-09-23 20:06 GMT+02:00 Zapilou <csi@zapilou.com
<mailto:csi@zapilou.com>>:

    Bonjour,

    Soit un fichier xml bien formé (genre annuaire) qui a a peu près
    cette structure:

    groupes
      groupe
       libelle
       adresse
       code_postal
       contacts
        contact
         identite
         tel
        contact
         identite
         tel
      groupe
       .... etc

    Je parcours sans trop de difficulté le fichier avec une boucle data
    à son niveau 1

    <BOUCLE_niv1 (DATA) {source simplexml, http://urlvers/syndic.xml\}
    {datapath root/children/groupe}>

    Mon problème est que je voudrai parcourir un 2nd niveau constitué
    des contacts. Si par ex je fais:

    <BOUCLE_niv2 (DATA) {source simplexml, http://urlvers/syndic.xml\}
    {datapath root/children/groupe/4/children/contacts/0/children/contact}>

    J'obtiens bien la liste des contacts du 4ème groupe, donc ça marche,
    la syntaxe semble correcte

    Mon idée était d'imbriquer _niv2 dans _niv1 et de remplacer "4" par
    "#CLE" ou "#_niv1:CLE" ou via un #SET et #GET pour obtenir pour
    chaque groupe la liste des contacts attachés, qui sont bien sûr en
    nombre variable ... un truc du genre:

    <BOUCLE_niv2 (DATA) {source simplexml, http://urlvers/syndic.xml\}
    {datapath
    root/children/groupe/#_niv1:CLE/children/contacts/0/children/contact}>

    Hélas, quoique j'essaye, je me retrouve avec la liste des contacts
    du groupe 0, c'est à dire que #CLE ou tout autre syntaxe me retourne
    0, donc j'ai toujours les contacts du groupe 0.

    Est-ce que ça n'est pas la bonne méthode (l'imbrication des
    boucles), cela veut dire que je ne peux pas mettre une balise spip
    dans le critère datapath ... Une idée sur la méthode pour retrouver
    pour chaque groupe ses contacts à lui et seulement ceux-là quel que
    soit leur nombre ?

    Merci d'avance à qui aura une bonne idée !

    Pierre.

--
Pierre

Il ne reste plus qu’à regarder quel code PHP est généré par la double boucle DATA (je partirais de la 1ère pour reboucler dans les résultats)

Bonjour

Après 490 heures d'essais:

<BOUCLE_niv1 (DATA) {source simplexml, http://urlvers/syndic.xml {datapath root/children/groupe}>
<BOUCLE_niv2 (DATA) {source table, #VALEUR{children/contacts}}>
<BOUCLE_niv3 (DATA) {source table, #VALEUR{children/contact}}>

Et voilà ... finalement assez simple :frowning:

Le 24/09/2015 15:28, Gilles Vincent a écrit :

Il ne reste plus qu'à regarder quel code PHP est généré par la double
boucle DATA (je partirais de la 1ère pour reboucler dans les résultats)

2015-09-24 14:08 GMT+02:00 Zapilou <csi@zapilou.com
<mailto:csi@zapilou.com>>:

    Bonjour,

    Le 24/09/2015 12:19, Gilles Vincent a écrit :

        Je tenterais bien avec un #COMPTEUR_BOUCLE, mais à mon avis ça
        marchera
        pas :slight_smile:

    J'avais tenté aussi, ça ne marche pas ... vraiment bizarre, je ne
    comprends pas comment on parcours ces 2ème niveau d'arborescences
    XML avec des quantités variables d'objets.

        2015-09-23 20:06 GMT+02:00 Zapilou <csi@zapilou.com
        <mailto:csi@zapilou.com>
        <mailto:csi@zapilou.com>>:

             Bonjour,

             Soit un fichier xml bien formé (genre annuaire) qui a a peu
        près
             cette structure:

             groupes
               groupe
                libelle
                adresse
                code_postal
                contacts
                 contact
                  identite
                  tel
                 contact
                  identite
                  tel
               groupe
                .... etc

             Je parcours sans trop de difficulté le fichier avec une
        boucle data
             à son niveau 1

             <BOUCLE_niv1 (DATA) {source simplexml,
        http://urlvers/syndic.xml\}
             {datapath root/children/groupe}>

             Mon problème est que je voudrai parcourir un 2nd niveau
        constitué
             des contacts. Si par ex je fais:

             <BOUCLE_niv2 (DATA) {source simplexml,
        http://urlvers/syndic.xml\}
             {datapath
        root/children/groupe/4/children/contacts/0/children/contact}>

             J'obtiens bien la liste des contacts du 4ème groupe, donc
        ça marche,
             la syntaxe semble correcte

             Mon idée était d'imbriquer _niv2 dans _niv1 et de remplacer
        "4" par
             "#CLE" ou "#_niv1:CLE" ou via un #SET et #GET pour obtenir pour
             chaque groupe la liste des contacts attachés, qui sont bien
        sûr en
             nombre variable ... un truc du genre:

             <BOUCLE_niv2 (DATA) {source simplexml,
        http://urlvers/syndic.xml\}
             {datapath

        root/children/groupe/#_niv1:CLE/children/contacts/0/children/contact}>

             Hélas, quoique j'essaye, je me retrouve avec la liste des
        contacts
             du groupe 0, c'est à dire que #CLE ou tout autre syntaxe me
        retourne
             0, donc j'ai toujours les contacts du groupe 0.

             Est-ce que ça n'est pas la bonne méthode (l'imbrication des
             boucles), cela veut dire que je ne peux pas mettre une
        balise spip
             dans le critère datapath ... Une idée sur la méthode pour
        retrouver
             pour chaque groupe ses contacts à lui et seulement ceux-là
        quel que
             soit leur nombre ?

             Merci d'avance à qui aura une bonne idée !

             Pierre.

    --
    Pierre

--
Pierre