2010-05-04 88 views
0

我正在嘗試遍歷一個Twitter XML文件,其中容器標記爲<users>,每個用戶爲<user>。我需要爲每個用戶創建一個基於XML屬性<id>的變量$id簡單的XML解析錯誤

用戶名已被實例化。

$url = "http://api.twitter.com/1/statuses/friends/$username.xml"; 
$xmlpure = file_get_contents($url); 
$listxml = simplexml_load_string($xmlpure); 

foreach($listxml->users->children() as $child) 
    { 
$id = $child->{"id"}; 
//Do another action 
} 

但我發現了這個錯誤:

Warning: main() [function.main]: Node no longer exists in /home/.../bonus.php on line 32

第32行是foreach語句,我不實際使用main()方法。

+0

SimpleXML忽略根標記,因此您不應該從「用戶」中走過樹。您可以執行$ listxml-> user或$ listxml-> children()。 – 2010-05-04 20:54:52

回答

0

可能是由$child代表的節點確實是而不是有一個孩子。您可以使用isset()或者甚至通過輸出節點的XML來檢查輸出是否爲echo $child->asXML();

此外,如果您打算使用$id作爲字符串,則應該按照這種方式進行強制轉換。

$id = (string) $child->id; 

另一件事,你可以加載該文件是這樣的:

$listxml = simplexml_load_file($url); 

最後,這裏提出一個問題時,請務必鏈接到原始XML文檔的相關樣品。


更新

爲可疑,你只是不訪問正確的節點。如果您指定不存在節點的名稱(在您的示例中爲「用戶」),SimpleXML將創建某種臨時幻像節點而不是生成錯誤。這是爲了讓我更容易創建新的節點。

總之,這裏的腳本應該是什麼樣子:

$users = simplexml_load_file($url); 

foreach ($users->user as $user) 
{ 
    $id = (string) $user->id; 
} 

始終命名依照它們代表,讓你總是知道你在哪裏,在樹的節點你的PHP增值經銷商;它會爲你節省很多未來類似的麻煩。根節點爲<users/>,因此變量爲$users,對於<user/>/$user也是如此。

+0

對不起。 以下是一個示例XML文件:http://api.twitter.com/1/statuses/friends/randomuser.xml $ child-> id語法和$ child - > {「 id「}語法? – phpeffedup 2010-05-04 20:22:02

+0

不,這兩種語法之間沒有功能差異,這就是爲什麼我更喜歡簡單的一種;) – 2010-05-04 20:37:34