2010-09-28 113 views
0

我有一個問題讀取XML的飼料 示例XML文件:的SimpleXML返回空元素

<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>... 

一個簡單的測試,如:

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

產生

SimpleXMLElement Object () 

如果我嘗試

echo $xml; 

以上示例正確回顯。

爲什麼$ feed數組未被構建?我如何訪問<f:articles>中的所有<a:article>

+0

沒有人有任何想法!? :-( – kritop 2010-10-01 14:16:26

回答

0

如何訪問<f:articles>中的所有<a:article>

對我來說simpleXML在處理命名空間時似乎有點笨拙(但是再次說明,我不是PHP編碼器)。你可以使用children方法,但在我看來使用XPath更簡單。

$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"); 

首先,你需要一些前綴註冊的名稱空間(前綴不需要匹配XML文檔中使用的那些,但名稱空間URI必須匹配),然後在你的XPath表達式選擇使用這些前綴您目標。沒有元素名稱前綴,XPath表達式將查找不在任何名稱空間中的元素。

爲什麼不建立$ feed數組?

很難猜出原因。有些東西你可以測試:

  • 是字符串$xml一個良好的XML文檔
  • 不使用simplexml_load_file($yourXMLfile);simplexml_load_string($yourXMLstring);
創建具有明確的字符串參數工作,一個SimpleXMLElement $feed = new SimpleXMLElement('<root><child/></root>');
  • 你可以加載文檔