简单的XML解析错误

时间:2010-05-04 20:04:27

标签: xml simplexml php

我正在尝试遍历Twitter XML文件,其中容器标记为<users>,每个用户都是<user>。我需要根据每个用户的XML属性$id创建一个变量<id>

用户名已经过实例化。

$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
}

但是我收到了这个错误:

  

警告:main()[function.main]:第32行/home/.../bonus.php中不再存在节点

第32行是foreach语句,我实际上并没有使用main()方法。

1 个答案:

答案 0 :(得分:0)

$child代表的节点可能<id/>个孩子。您可以使用isset()或使用echo $child->asXML();

输出节点的XML来检查它

此外,如果您打算将$id用作字符串,则应该将其转换为字符串。

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

另一件事,您可以像这样加载文档:

$listxml = simplexml_load_file($url);

最后,在这里提问时,请始终链接到原始XML文档的相关示例。


<强>更新

如所怀疑的,您只是不访问正确的节点。如果指定不存在节点的名称(示例中为“users”),SimpleXML会创建某种临时幻像节点,而不是生成错误。这是为了让我更容易创建新节点。

无论如何,这是你的脚本应该是什么样子:

$users = simplexml_load_file($url);

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

始终根据它们所代表的节点命名您的PHP变量,以便始终知道您在树中的位置;它将为您节省很多未来类似的麻烦。根节点为<users/>,因此变量为$users<user/> / $user的变量相同。