2009-12-15 8 views
0

J'ai un petit fichier XML:PHP SimpleXML avec XPath

<wddxPacket version='1.0'> 
    <header/> 
    <data> 
    <struct type='coldfusion.runtime.ArgumentCollection'> 
     <var name='HEADLINE'> 
     <string>Richard Barret's Articles on Leadership and High Performance Organisations</string> 
     </var> 
    </struct> 
    </data> 
</wddxPacket> 

J'essaie d'utiliser PHP SimpleXML et XPath pour extraire la valeur entre l'élément de chaîne dans le nom var élément HEADLINE. Ce code fonctionne:

// Location of the XML file on the file system 
$file = 'http://10.10.200.37/skins/importscript/41802.xml'; 
$xml = simplexml_load_file($file); 

// CREATE THE ARRAYS FOR EACH XML ELEMENT NEEDED 

$title = $xml->xpath('//var[@name="HEADLINE"]'); 

echo "<p>"; 
print_r($title); 
echo "</p>"; 

Le problème est qu'il renvoie non seulement la valeur, mais aussi toutes les informations de tableau. Comme dans:

 
Array ( 
    [0] => SimpleXMLElement Object ( 
    [@attributes] => Array ( 
     [name] => HEADLINE 
    ) 
    [string] => Richard Barret's Articles on Leadership and High Performance Organisations 
) 
) 

Comment puis-je obtenir pour revenir juste la valeur et rien d'autre?

Si je remplace print_r par echo $title;, j'obtiens le mot Array sur la page au lieu de la valeur. Si j'essaye echo $title[0]; je n'ai rien du tout.

J'ai essayé tellement de choses maintenant ne peux pas penser à autre chose! Qu'est-ce que je fais mal? Quelqu'un pourrait-il me pointer dans la bonne direction? Merci!

Répondre

11

Désolé, ignorez ceci! Juste après avoir posté la question, j'ai réalisé ce que je faisais mal!

Pour que personne ne soit aussi lent que je suis ici aujourd'hui est le problème ...

$title = $xml->xpath('//var[@name="HEADLINE"]'); 

devrait être:

$title = $xml->xpath('//var[@name="HEADLINE"]/string'); 

Maintenant, il fonctionne comme il se doit.

+0

+1. Un autre vote supplémentaire et votre premier badge gagné sur Stack Overflow est [Self-Learner]. Cela vous mettrait dans un cercle plutôt exclusif - actuellement, seulement 262 sur plus de 117 000 utilisateurs l'ont. ;) – Tomalak

3

Vous êtes intéressé par le nodeValue.

Exemple:

$xpath->evaluate("some_tag_name", $some_dom_element)->item(0)->nodeValue; 

ou utilisez le sélecteur string:

$title = $xml->xpath('//var[@name="HEADLINE"]/string'); 
0

Comme une habitude que j'ajoute toujours le type 'string' lors de l'obtention des valeurs de SimpleXML

$title = (string) $xml->xpath('//var[@name="HEADLINE"]/string'); 

Non Assurez-vous que c'est une bonne pratique ..