2010-05-24 6 views
1

J'essaye d'analyser un fichier xml pour retourner un élément avec un identifiant spécifique seulement, mais j'ai des problèmes le faisant fonctionner.Analyser xml avec php et xpath

voici ce que j'ai en php

$xml_str = file_get_contents("test.xml"); 
$xml = simplexml_load_string($xml_str); 
$albid = $_GET['id']; 

$nodes = $xml->xpath('//library/book[@id=1]'); 

foreach($nodes as $node) { 
echo $node['title'].'<br/>'; 
} 

D'abord, le php est rien de retour à partir du fichier xml.

Que devrais-je corriger pour retourner les données?

De même, comment entrer $ albid dans le xpath pour que l'id soit récupéré du lien?

Tout pointeur dans la bonne direction serait apprécié.

Merci!

--et voici l'exemple xml file--

<library> 
<book id="1"> 
    <title>PHP and MySQL</title> 
    <author fname="miguel" lname="alvarez">Miguel Alvarez</author> 
</book> 
<book id="2"> 
    <title>JAVA 123</title> 
    <author fname="william" lname="vega">WIlliam Vega</author> 
</book> 

+0

N'oubliez pas votre étiquette de fermeture. – allnightgrocery

Répondre

3

D'abord, vous devez fermer la balise <library>, sinon le XML est malformé et l'analyse syntaxique échouera.

SimpleXMLElement :: XPath() retourne un objet (ref), donc à l'intérieur de la boucle faire: echo $node->title.'<br/>';

Obtenir albid $ dans la chaîne .. bien, concaténation de chaînes d'utilisation: $nodes = $xml->xpath('//library/book[@id='.$albid.']');

+0

Merci beaucoup d'expliquer comment/pourquoi changer le code. Fonctionne très bien! –

2

Essayez ce,

$xml_str = file_get_contents("test.xml"); 
$xml = simplexml_load_string($xml_str); 
$albid = $_GET['id']; 

$nodes = $xml->xpath("//library/book[@id=$albid]"); 

foreach($nodes as $node) { 
    echo $node->title.'<br/>'; 
} 
+0

drôle comment c'est toujours un petit morceau de code qui fait l'affaire. Je l'ai eu à travailler d'en haut, mais merci pour l'autre façon d'utiliser xpath –