0

我试图循环并显示来自以下 xml 结构的信息。

<users_list>
  −&lt;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函数上使用无效的参数

4

3 回答 3

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 的更多信息

于 2009-11-07T14:27:36.850 回答
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";
于 2009-11-07T19:40:06.983 回答
0

print_r($xml)应该给你你需要的所有信息。您可能会发现实际的数组是 $xml->user_list->users->user,而且强制转换也有助于节省一些时间

foreach($xml->user_list->users->user as $value) {
  $name = (string) $value->id;
}
于 2009-11-07T14:20:51.107 回答