2012-05-09 2 views
2

Le projet sur lequel je travaille actuellement implique la traduction d'un site web écrit en Python en code PHP. La partie que je fais maintenant me demande d'envoyer des requêtes $ _GET à un serveur web. La réponse que je reçois est toujours au format XML, donc j'utilise la fonction * simplexml_load_file() * pour récupérer le résultat.Quelle est la meilleure façon de trouver un élément spécifié en utilisant la classe PHP SimpleXMLElement?

Je dois analyser le code XML que le serveur Web me renvoie. Python avait une belle bibliothèque appelée BeautifulStoneSoup, qui avait une méthode find() qui renvoyait le contenu d'un attribut spécifié.

Après avoir regardé la liste des fonctions PHP au http://php.net/manual/en/book.simplexml.php, je n'arrive pas à trouver quelque chose qui me permette de spécifier un nom d'attribut et d'obtenir le contenu. Gardez à l'esprit que l'attribut que je cherche peut-être ne sera pas forcément toujours au même niveau dans le tableau XML. Il peut y avoir plusieurs dimensions dans le tableau.

Je peux donner un exemple si ce n'était pas assez spécifique. Merci pour l'aide, les amis!

+2

[ 'xpath'] (http://de.php.net/manual/en/simplexmlelement.xpath.php), suppose que quelqu'un écrit un plus -déponse réponse/exemple bientôt (tm). – ccKep

Répondre

3

Xpath ressemble à ce que vous cherchez. Il permet de faire des recherches dans n'importe quel niveau d'un répertoire XML.

L'exemple suivant semble plusieurs niveaux de profondeur avec un répertoire xml et vérifie si le nœud de description contient tout ce qui est tenue dans $txtSearch

$holidayDoc = simplexml_load_file($url);  
$qry = "//channel/item[description[contains(text(),\"$txtSearch\")]]"; 
$holidayDoc->xpath($qry); 

Les résultats peuvent alors être itérés en utilisant une boucle foreach

+0

Ah, oui! Pourquoi ne pourrais-je pas trouver ça avant? C'est exactement ce dont j'avais besoin. Merci beaucoup. +++ –

+0

Pas de problème du tout, je viens d'étudier ça à l'université et je n'en avais jamais entendu parler non plus. –

+0

Vous pouvez également accepter cette réponse si elle vous est la plus utile :) –

0

Vous pouvez exécuter une requête XPath:

$xml->xpath('//@myattribute') 
Questions connexes