2010-09-28 20 views
0

J'ai eu un problème de lecture d'un exemple de fichier XML XML-Feed :simpleXML retourne élément vide

<f:feed xmlns:f="http://www.bbgo.de/feedxml/feed" xmlns:a="http://www.bbgo.de/feedxml/article" xmlns="http://www.w3.org/1999/xhtml" f:customer="blub" f:name="dax-tecdax"> 
<f:title>Analysen: DAX, TecDAX</f:title> 
<f:date>2010-09-22T20:46:29+02:00</f:date> 
<f:url>http://www.bbgo.de/export/feed/stock-channel/dax-tecdax</f:url> 
<f:articles> 
<a:article a:id="2310446" a:status="published" a:payed-content="false" xml:lang="de-DE"> 
<a:title>Kabel Deutschland mit Verkaufsempfehlung</a:title>... 

Un test simple comme:

$feed = new SimpleXMLElement($xml); 
print_r($feed); 

produit

SimpleXMLElement Object () 

si j'essaye

echo $xml; 

l'échantillon ci-dessus est correctement répercuté. Pourquoi $ array array n'est pas construit? Comment puis-je accéder à tous les <a:article> en <f:articles>?

+0

Personne n'a d'idée!? :-( – kritop

Répondre

0

Comment puis-je accéder à tous <a:article> en <f:articles>?

Pour moi, simpleXML semble un peu maladroit quand on travaille avec des espaces de noms (mais là encore, je ne suis pas un codeur PHP). Vous pouvez utiliser la méthode children mais, à mon avis, l'utilisation de XPath est plus simple.

$feed->registerXPathNamespace('f', 'http://www.bbgo.de/feedxml/feed'); 
$feed->registerXPathNamespace('a', 'http://www.bbgo.de/feedxml/article'); 
$article = feed->xpath("/f:feed/f:articles/a:article"); 

Vous devez d'abord enregistrer les espaces de noms avec certains préfixes (préfixes ne doivent pas nécessairement correspondre à ceux utilisés dans le document XML, mais l'espace de noms URIs doivent correspondre) et ensuite utiliser ces préfixes dans l'expression XPath qui sélectionne votre cible. Sans les préfixes de nom d'élément, l'expression XPath recherche les éléments qui ne se trouvent dans aucun espace de noms.

Pourquoi le tableau $ feed n'est-il pas construit?

Il est difficile de deviner pourquoi. Certaines choses que vous pouvez tester:

  • est la chaîne $xml un document XML bien formé
  • le fait de créer un SimpleXMLElement avec le paramètre chaîne explicite travail $feed = new SimpleXMLElement('<root><child/></root>');
  • peut vous charger votre document à l'aide simplexml_load_file($yourXMLfile); ou simplexml_load_string($yourXMLstring);