2 votes

simplexml_load_file multiple equals nodes

J'ai ce XML :

<user>
    <name>Name</name>
    <jobs>Job 1</jobs>
    <jobs>Job 2</jobs>
</user>

Je lis le fichier de cette façon :

$xml = simplexml_load_file($file->getRealPath());

Je suis capable d'obtenir l'attribut nom par :

(string) $xml->name

Mais si j'essaie ça :

$jobs = $xml->jobs

Je n'ai qu'un seul travail dans mon $jobs variable

Comment puis-je modifier mon code pour obtenir tous les travaux à partir de xml ?

1voto

iainn Points 11325

$xml->jobs dans SimpleXML est l'abréviation de $xml->jobs[0] - c'est-à-dire qu'il vous donne juste le premier élément avec ce nom. C'est ce qui vous permet de faire des choses "simples" comme $xml->node1->node2->node3->etc pour accéder rapidement à un document.

Si vous voulez boucler sur tous les nœuds ayant le même nom, vous pouvez simplement utiliser une commande standard de type foreach (puisqu'ils mettent en œuvre la fonction Traversable interface) :

foreach ($xml->jobs as $job) {
  // do something...
}

Si vous souhaitez simplement récupérer l'ensemble des nœuds sous forme de tableau (afin de les transmettre à une autre fonction, par exemple), vous pouvez utiliser la fonction xpath pour rechercher des nœuds par leur nom (entre autres) :

$jobs = $xml->xpath('jobs');

Voir https://3v4l.org/9lcio

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X