用php导航这个xml结构

时间:2009-11-07 13:46:23

标签: php xml simplexml

我试图遍历并显示以下xml结构中的信息。

<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函数

上回显我的变量或无效参数时,我得不到任何结果

3 个答案:

答案 0 :(得分: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

的更多信息

答案 1 :(得分: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";

答案 2 :(得分:0)

print_r($xml)应该为您提供所需的所有信息。 你可能会发现实际的数组是$ xml-&gt; user_list-&gt; users-&gt; user, 铸造也有助于节省时间

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