2009-12-22 3 views
1

J'ai une structure xml de la forme suivante à analyser avec PHP simplexml.Analyse XML à l'aide de SimpleXML en PHP

<books> 

<book> 
<title>XYZ</title> 
<author> someone </author> 
<images> 
<image type="poster" url="<url>" size="cover" id="12345"/> 
<image type="poster" url="<url>" size="thumb" id="12345"/> 
</images> 
</book> 

<book> 
<title>PQR</title> 
<author> someoneelse </author> 
<images> 
<image type="poster" url="<url>" size="cover" id="67890"/> 
<image type="poster" url="<url>" size="thumb" id="67890"/> 
</images> 
</book> 

</books> 

Supposons que je souhaite imprimer le titre du premier livre. Je suis en mesure de le faire en utilisant

$books = $xml->books; 
$book = $books->book[0]; //Get the first book 
print $book->title; //This works 

Mais, quand je tente d'imprimer toutes les images urls pour ce livre, il ne fonctionne pas. Le code im en utilisant est:

$books = $xml->books; 
$book = $books->book[0]; //Get the first book 
$images=$book->images; 

foreach($images as $image) //This does not work 
{ 
    print $image->url; 
} 

Un moyen de résoudre ce problème?

Merci

Répondre

1

L'URL est un attribut, pas un élément enfant. Essayez ceci:

print $image->attributes()->url; 

Documentation here

+0

Merci pour le pseudo-réponse. Mais je semble avoir un problème étrange ici. print $ images-> image [0] -> attributes() -> url imprime l'url de la première image correctement, mais encore une fois la boucle ci-dessous pour imprimer les urls de toutes les images ne fonctionne pas ... ce qui pourrait être mauvais ici ? foreach ($ images comme $ image) {print $ image-> attributes() -> url; } – John

+1

Vous devez également faire foreach ($ images-> image as $ image) – jmans

2

Cela fonctionne pour moi:

foreach ($xml->book[0]->images->image as $image) { 
    echo $image['url'] . "\n"; 
} 

Voir SimpleXML Basic usage.