2009-11-07 27 views
0

我試圖循環,並顯示來自以下xml結構的信息。導航通過這個XML結構與PHP

<users_list> 
    −<users type="array"> 
    +<user> 
     <id>Blah</id> 
    </user> 
    +<user></user> 
    +<user></user> 
    </users> 
    <next_link>6</next_link> 
    <prev_link>4</prev_link> 
</users_list> 

使用下面的PHP來抓取節點。

 $xml = simplexml_load_string($rawxml); 
     foreach($xml->users_list AS $key){ 
      $name = $key->users->user->{"id"}; 
     } 
      $next = $key->{"next_link"}; 
      $prev = $key->{"prev_link"}; 

我試過了一些變化,但我沒有看到任何效果。當我回應我的變量或無效參數時,我或什麼都沒有得到,當我在我的foreach函數

回答

2

如果使用SimpleXML,你應該總是命名變量,它們所包含的根節點,它使事情變得更簡單和明顯的後:

$users_list = simplexml_load_string(
    '<users_list> 
     <users type="array"> 
     <user> 
      <id>Blah</id> 
     </user> 
     <user></user> 
     <user></user> 
     </users> 
     <next_link>6</next_link> 
     <prev_link>4</prev_link> 
    </users_list>' 
); 

foreach ($users_list->users->user as $user) 
{ 
    echo "User ", $user->id, "\n"; 
} 

echo "next: ", $users_list->next_link, "\n"; 
echo "prev: ", $users_list->prev_link, "\n"; 
+0

警告:在第55行的functions.php中爲foreach()提供的無效參數Array - 這就是我使用此方法時得到的結果。 – mrpatg

+0

我發佈的代碼原樣使用。我的猜測是你的變量沒有命名爲$ users_list。嘗試'error_reporting(E_ALL);' –

0

print_r($xml)應該給你所有你需要的信息。 你可能會發現,實際的數組是$ XML-> user_list->用戶 - >用戶, 也鑄造有助於節省一些時間

foreach($xml->user_list->users->user as $value) { 
    $name = (string) $value->id; 
} 
2

當PHP故障排除,var_dumpprint_r是你的朋友!

如果您希望像數組一樣瀏覽結果,則將其轉換爲數組。

$value = (array) $value;

我做了以下內容:

$xmlStr = '<users_list> 
<users type="array"> 
<user> 
<id>Blah</id> 
</user> 
<user></user> 
<user></user> 
</users> 
<next_link>6</next_link> 
<prev_link>4</prev_link> 
</users_list>'; 

$xml = simplexml_load_string($xmlStr); 

foreach($xml->users->user AS $key=>$value){ 
    $value = (array) $value; 
    $name = $value["id"]; 
    var_dump($name); 
} 

這給輸出:

string(4) "Blah" 
NULL 
NULL 

檢查進一步信息的PHP幫助文檔上的SimpleXML

+0

注意的print_r()和後續代碼var_dump()只是在SimpleXMLElement中不能很好地工作,孩子不會出現,某些屬性也不會出現。 –