2010-01-10 57 views
2

我有一個根節點叫做XML節點,我試圖添加一個新的子節點,但是我收到了錯誤。裏面還有孩子。這裏是我的代碼:PHP:在父代中創建新節點

$xml = new DomDocument(); 
    $xml->load(X_ASSETS); 
    $xml->formatOutput = true; 
    $new_id = $this->getNewAssetId(); 
    // Root 
    $xpath = new DOMXPath($xml); 
    $assets = $xpath->query('assets'); 
    $xml_assets = $assets->item(0); 
    $xml_root = $xml->createElement('asset'); 
    // Asset Name 
    $xml_name = $xml->createElement('name'); 
    $xml_name->nodeValue = $clean_name; 
    $xml_root->appendChild($xml_name); 
    // Asset URL 
    $xml_url = $xml->createElement('url'); 
    $xml_url->nodeValue = '/'.$name; 
    $xml_root->appendChild($xml_url); 
    // Asset ID 
    $xml_id = $xml->createElement('id'); 
    $xml_id->nodeValue = $new_id; 
    $xml_root->appendChild($xml_id); 


    // Create our document and save 
    $xml_assets->appendChild($xml_root); 
    $xml->save(X_ASSETS); 

運行這個時,我得到了以下錯誤:

致命錯誤:調用一個成員函數的appendChild()在/ home /網站/ zed_x /核心非對象/includes/x.inc在線88

有沒有人知道我在做什麼錯在這裏?

+0

哪一個是線88? – 2010-01-10 23:21:47

+0

這將是很好的告訴你的代碼中的哪一行是88.因此,它知道錯誤體現的位置 – Veger 2010-01-10 23:22:40

+0

對不起,$ xml_assets-> appendChild($ xml_root);是88行。 – 2010-01-10 23:25:29

回答

2

不知你$xml_assets不是對象,因此,你不能調用函數:

$xml_assets->appendChild($xml_root); 

你一定積極的,下面的命令返回一個對象?

$xml_assets = $assets->item(0); 

測試:

if(is_object($xml_assets)) 
{ 
    echo "Object Here!"; 
} 

這可能是一個很好的方式來組織你的代碼,這樣你就可以捕獲錯誤

// .... stuff ..... 
$xml_assets = $assets->item(0); 

// ... more stuff .... 

// Check for Object 
if(!is_object($xml_assests)) 
{ 
    die("No Object Created!"); 
} 

$xml_assets->appendChild($xml_root); 
$xml->save(X_ASSETS); 

// .... more stuff ..... 
+0

糟糕,錯誤的變量。 – 2010-01-10 23:26:25

+0

是的,它是一個對象,我測試過它。也許$ xml_assets不是? – 2010-01-10 23:27:36

+0

更新了它。是的,這將是一個'$ xml_assets'問題 – 2010-01-10 23:28:04