2013-03-25 114 views
1

我不斷收到以下錯誤:SimpleXML的錯誤「調用一個成員函數的非對象」

Fatal error: Call to a member function addChild() on a non-object in /www/zzl.org/t/h/e/theseminary/htdocs/submit.php on line 3

我的代碼,在自己的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> 
+0

顯示你的xml文件,請 – michi 2013-03-25 22:12:26

+0

@michi完成!這是我通過將字符串轉換爲XML而使用SimpleXML生成的文件。 – 2013-03-25 23:26:31

+0

如果它實際上回答了您的問題,請考慮接受答案 – michi 2013-04-14 12:39:31

回答

0

錯誤被稱爲該行

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

,並「說」你究竟是怎麼回事。

簡單posts[0]不是一個對象(就像你試圖做類似1->addChild("item");'foo'->addChild("item");null->addChild("item");

你肯定->post[0]將返回一個值(所以,一個SimpleXMLElement對象)?

+0

我更改了代碼,以便在文件的每個級別('$ xmlobject','channel','posts'等)嘗試添加子項。它沒有給出主層的錯誤(所以'$ xmlobject-> addChild(「item」)'有效,但其餘部分沒有)。也許我會嘗試放棄頻道標記。無論如何,這是不必要的。 – 2013-03-25 20:57:21

+0

我刪除了頻道標籤,但收到相同的錯誤。我的語法錯了嗎?我知道文件「data.xml」存在並且是格式正確的xml文件,它似乎在頂層工作。 – 2013-03-25 21:00:38

+0

@ user1313992:請用xml文件更新您的答案,以便我們可以猜測那裏發生了什麼 – DonCallisto 2013-03-26 07:51:08

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> -nodes,如果要算<item>s,去...

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

。 ..並記住要做$itemcount--,因爲索引從0開始。

相關問題