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

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] utilisation de xpath


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut [SimpleXML] utilisation de xpath
    Bonjour,
    Voici la structure du fichier xml que j'utilise :
    Code XML : 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
    <racine>
    <element code='aa'>
    <langue code_langue='aaa'>
    <nom>
    <forme attr='ltr'>
    premiere forme
    </forme>
    <forme attr='ltr'>
    deuxieme forme
    </forme>
    <forme attr='rtl'>
    troisieme forme
    </forme>
    </nom>
    </langue>
    <langue code_langue='aab'>
    <nom>
    <forme attr='ltr'>
    premiere forme
    </forme>
    <forme attr='rtl'>
    deuxieme forme
    </forme>
    </nom>
    </langue>
    </element>
    <element code='bb'>
    ...
    </element>
    </racine>

    De ce fichier, j'extrais toutes les formes des éléments en fonction de la langue choisie grâce à xpath :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $xml = simplexml_load_file('element.xml');
    $xpath='//element/langue[code_langue="aaa"]';
    $element=$xml->xpath($xpath);
    Ensuite avec une boucle je crée la liste déroulante suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while (isset($element[$j])){
    	$n=$j%2;		
    	for ($k=0;$k<count($element[$j]->nom);$k++){
    	$liste_option='';
    		for ($l=0;$l<count($element[$j]->nom->forme);$l++){
    		$liste_option.=$element[$j]->nom[$k]->forme[$l];
    		if($l!=count($element[$j]->nom->forme)-1)$liste_option.=' / ';
                    $liste_pays_meteo .="<option class='option$n'>" .$liste_option."</option>\n";
    		}
    	$j++;
    	}
    A ce point, j'aimerai pouvoir ajouter à la balise option :
    <option class='option$n' value='attribut de l'élément parent'>

    Et là je bloque. je ne vois pas comment extraire cet attribut.

    Merci de votre attention.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Tout d'abord sachez qu'il existe plus idiomatique comme méthode de parcours : l'itération foreach. Exemple :
    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
    $xml = simplexml_load_file('element.xml');
    $elements = $xml->xpath('//element/langue[@code_langue="aaa"]');
    $j = 0;
    foreach ($elements as $elt) {
        $n = $j % 2;		
        foreach ($elt->nom as $n) {
            $liste_option='';
            foreach ($n->forme as $f) {
                $liste_option .= (string) $f;
                /* ... */
                $liste_pays_meteo .= "<option class='option$n'>" . $liste_option . "</option>\n";
            }
        }
        $j++;
    }
    A priori il y a des erreurs dans votre code (incomplet) : des variables sont indéfinies ou mal utilisées ainsi que l'expression XPath (elle devrait être //element/langue[@code_langue="aaa"]).

    Citation Envoyé par merlin31
    A ce point, j'aimerai pouvoir ajouter à la balise option :
    <option class='option$n' value='attribut de l'élément parent'>
    Quel parent ? Par rapport à qui ? Les objets SimpleXMLElement ne vous permettent pas de remonter leur hiérarchie au contraire de l'extension DOM : le seul moyen est de posséder à un moment ou un autre une variable s'y référant (ce que vous permettent probablement vos diverses itérations).

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut petites précisions
    J'ai toujours des soucis avec la boucle foreach .
    Effectivement en recopiant le code j'avais oublié @code='aaa'.
    L'attribut que j'essaie de récupérer, c'est l'attribut de la balise <element> qui est le premier ancêtre de <forme>.
    Cet attribut n'est pas dans le tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $elements = $xml->xpath('//element/langue[@code_langue="aaa"]');
    Donc effectivement je n'ai pas de variable qui s'y réfère. Et c'est bien cela mon point de blocage je ne vois vraiment pas comment je peux la créer.
    Je vais voir du côté de DOM

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Le plus simple serait sans doute de passer par une autre requête XPath. Je suppose que ceci revient à ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $myelement = array_shift($xml->xpath('//element[langue[@code_langue="aaa"]]'));
    if (!$myelement) {
        // ...
    } else {
        echo $myelement['code'];
    }

Discussions similaires

  1. [DOM] Utilisation d'Xpath
    Par Yoshio dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 23/08/2007, 14h33
  2. [SimpleXML] Utilisation de simplexml_load_file()
    Par Forza Correza dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 17/07/2007, 15h45
  3. [SimpleXML] Utilisation de la fonction simplexml_load_file()
    Par defacta dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 02/11/2006, 11h20
  4. [SimpleXML] Utilisation de SimpleXML ?
    Par ghohm dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 06/07/2006, 19h24
  5. [SimpleXML] Utilisation chez OVH
    Par vodnok dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/11/2005, 09h52

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