我正在尝试遍历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()
方法。
答案 0 :(得分:0)
$child
代表的节点可能不有<id/>
个孩子。您可以使用isset()或使用echo $child->asXML();
此外,如果您打算将$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
的变量相同。