2009-11-07 5 views
0

Im пытается просмотреть и отобразить информацию из следующей структуры 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"}; 

Ive попробовал пару вариантов, но я не вижу никакого эффекта. Я ничего не получаю, когда я повторяю свои переменные или неверные аргументы, когда на моей функции

ответ

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

Предупреждение. Недействительный аргумент, предоставленный foreach() в functions.php в строке 55. Массив. То, что я получаю, когда использую этот метод. – mrpatg

+0

Код, который я опубликовал, работает как есть. Моя догадка заключается в том, что ваша переменная не называется $ users_list. Попробуйте 'error_reporting (E_ALL);' –

0

print_r($xml) должен предоставить вам всю необходимую информацию. Вы, вероятно, обнаружите, что фактический массив $ xml-> user_list-> users-> пользователя, также литье помогает сэкономить время

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

При устранении неполадок в PHP, var_dump и print_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, дети не появятся, и некоторые атрибуты тоже не будут. –

Смежные вопросы