2013-02-16 95 views
0

我有一個XML顯示客戶端徽標,並希望通過PHP面板添加徽標。當前XML代碼: 在使用PHP的特定節點之前更新XML插入節點

<item> 
     <image><![CDATA[images/clients_5.gif]]></image> 
    </item> 
    <item> 
     <image><![CDATA[images/clients_6.gif]]></image> 
    </item> 
    <item> 
     <image><![CDATA[images/clients_7.gif]]></image> 
    </item> 
    <item> 
     <image><![CDATA[images/clients_8.gif]]></image> 
    </item> 
    <item> 
     <image><![CDATA[images/clients_9.gif]]></image> 
    </item> 
    <item> 
     <image><![CDATA[images/clients_10.gif]]></image> 
    </item> 
    <item> 
     <image><![CDATA[images/clients_11.gif]]></image> 
    </item> 
    <item> 
     <image><![CDATA[images/clients_12.gif]]></image> 
    </item> 
    <item> 
     <image><![CDATA[images/clients_13.gif]]></image> 
    </item> 
    <item> 
     <image><![CDATA[images/clients_14.gif]]></image> 
    </item> 
    <item> 
     <image><![CDATA[images/clients_15.gif]]></image> 
    </item> 

    <footer><![CDATA[copyright evolve entertainment and marketing solutions, 2009]]></footer> 

</clients> 

PHP代碼:

if(!empty($_FILES["logo"]["name"])) 
{ 
    $handle = new Upload($_FILES["logo"]); 
    $imgId = uniqid();  
    if ($handle->uploaded) 
    { 
     $handle->file_name_body_pre = $imgId; 
     $handle->image_resize   = false; 
     $handle->Process(ROOT_PATH.'images/'); 
     $handle->processed; 
    } 
    $imgName = $imgId.$_FILES["logo"]['name']; 

    $parent_path = "//main"; 
    $next_path = "//main/clients/footer"; 
    $xpath = new DomXPath($doc); 
    $parent = $xpath->query($parent_path); 
    $next = $xpath->query($next_path); 



    $imageNode = $doc->createElement('image'); 
    $cdata=$doc->createCDATASection($imgName); 
    $imageNode = $imageNode->appendChild($cdata); 

    //$parent->item(0)->insertBefore($imageNode, $next->item(0)); 

    $section = $doc->insertBefore($imageNode,$next->item(0)); 

    $doc->save(XML_PATH.'clients.xml'); 

,我想無論是之前的頁腳或在頂子節點添加新節點。當我試圖上面的代碼它充當一個錯誤:未捕獲的異常「拋出:DOMException」與消息「未找到錯誤」

+1

你如何定義'$ doc'? – hohner 2013-02-16 12:33:17

+0

$ doc = new DOMDocument(); $ doc-> load(XML_PATH.'clients.xml'); – Solvonix 2013-02-16 15:35:16

+0

什麼行會拋出此錯誤?這行號碼上有什麼PHP代碼? – hohner 2013-02-16 15:55:11

回答

0

未捕獲的異常「拋出:DOMException」與消息「未找到錯誤」

這意味着找不到節點。您沒有指定該行,但我認爲它是:

$section = $doc->insertBefore($imageNode, $next->item(0)); 

這是有問題的。 $doc是根元素,但它不是$next->item(0)的父元素。爲了使這個工作,refnode(這裏:$next->item(0))需要是$doc的孩子 - 但事實並非如此。

相反這裏是一個簡單而豐富的例子也給一些更好的講代碼:

$refnode = $next->item(0); 
$parent = $refnode->parentNode; 
$section = $parent->insertBefore($imageNode, $refnode); 

當然,你並不需要使用很多變數,但例子應該給你帶路,特別是看到$refnode->parentNode可以從中插入正確的節點,然後插入其任何子節點。

是的,這是錯誤的:

$imageNode = $imageNode->appendChild($cdata); 

你真的應該再次檢查手冊爲你使用的所有功能。只是爲了確保你知道這些函數返回的內容。

+0

謝謝!你的建議爲我工作。 – Solvonix 2013-02-17 05:27:31

+0

@Solvonix:請參閱http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work;) - 很高興它幫助 – hakre 2013-02-17 07:41:26