2012-08-22 76 views
0

好的,對此抱歉,但是讓內褲與真正非常簡單的任務扭曲在一起。我有一個簡單的XML結構:如果鍵入查詢,更新或添加節點到simplexml

<site> 
<page> 
<pagename>page1</pagename> 
    <title>title1</title> 
    <id>abc 
    <plot> 
    this is text 
    </plot> 
    </id> 
    </page> 

<page> 
    <pagename>page2</pagename> 
    <title>titlee2</title> 
    <id>xyz 
    <plot> 
    this is text 
    </plot> 
    </id> 
</page> 
</site> 

我路過阿賈克斯後3個變量從表單變量是頁面名稱,ID和陰謀。

我似乎無法做的是寫正確的查詢,檢查頁面名稱節點與pagename變量,然後檢查該頁面中的id節點。如果id節點存在,那麼我更新plot節點,如果id不存在,則創建id節點和plot節點。

我可以寫/更新節點,有人幫助找到正確的頁面,但後來我迷路了。所以在我的例子上面的XML如果我通過變量pagename = page1和id = abc然後我只是更新的情節,但如果pagename是page1和id = def(這不存在)我需要創建id和情節。正如說可以做addChild,更新位,只是無法獲得查詢權利,檢查ID是否存在該頁 - 注意$id = $site->xpath('//id[text()="'.$posted_variable.'"]');不適合我,因爲該ID可能存在於多個頁面節點,但它不能被複制到相同的頁面節點中。

非常感謝幫助

回答

0

好,我有工作,可能不漂亮,但它的工作 -

$xml = simplexml_load_file('xml.xml'); 

$site = new SimpleXMLElement($xml->asXML()); 

$paget = "index"; 

$text = $_POST['tosave']; 

$text = htmlentities($text, ENT_QUOTES, 'UTF-8'); 

// EDIT/UPDATE // 

$pages = $site->xpath('//page/pagename[text()="'.$paget.'"]/..'); 

if($pages){ 

$a = array(); 

foreach($pages[0]->id as $ID){ 

array_push($a,$ID); 

} 


if(in_array($_POST['containerid'],$a)){ 

    foreach ($a as $key => $value) { 

     if($value==$_POST['containerid']){ 

     $pages[0]->id[$key]->plot = trim($text) ; 

     } 

    } 

} else { 

     $pages[0]->addChild('id',$_POST['containerid'])->addChild('plot',trim($text)); 

} 

} 

$site->asXML("xml.xml"); 

exit;