SimpleXML错误'调用非对象上的成员函数'

时间:2013-03-25 13:11:48

标签: php html xml simplexml

我一直收到以下错误:

  

致命错误:在第3行/www/zzl.org/t/h/e/theseminary/htdocs/submit.php中的非对象上调用成员函数addChild()

我的代码在自己的php文件中如下:

<?php
$xmlobject = simplexml_load_file('data.xml');
$xmlobject[0]->channel[0]->posts[0]->addChild("item");
$itemcount = $xmlobject->channel->posts->count();
$xmlobject->channel[0]->posts[0]->item[$itemcount]->addChild("title", $title);
$xmlobject->channel->posts->item[$itemcount]->addChild("content", $content);
$xmlobject->asxml("data.xml");
header( "Location: $url" );
?>

我发现这个问题已被多次询问,但我无法找到我的问题的解决方案。

这是XML文件,如果有帮助的话。

<?xml version="1.0"?>
<channel>
<title></title>
<description></description>
<posts>
</posts>
</channel>

2 个答案:

答案 0 :(得分:3)

改变这个......

$xmlobject[0]->channel[0]->posts[0]->addChild("item");

到此......

$xmlobject->posts[0]->addChild("item");

原因:<channel>是您的根元素,$xmlobject代表根元素。

这也是发布XML的必要原因 看现场演示@ http://codepad.viper-7.com/DffgLG

顺便说一下,这行...

$itemcount = $xmlobject->posts->count();

将计算<posts> - 节点,如果您想计算<item>s,请转...

$itemcount = $xmlobject->posts->item->count();

...并且记得做$itemcount--,因为索引从0开始。

答案 1 :(得分:0)

错误被引用到此行

$xmlobject[0]->channel[0]->posts[0]->addChild("item");

正在“正在”向你说“正在发生什么。”

简单posts[0]不是对象(就像您尝试执行1->addChild("item");'foo'->addChild("item");null->addChild("item");之类的操作)

您确定->post[0]会返回一个值(所以,SimpleXMLElement对象)吗?