2013-11-14 51 views
1

我想從我的jobs.xml文件中使用PHP腳本刪除孩子。需要幫助在使用PHP刪除XML的孩子

我jobs.xml看起來像的方法是:

<jobs> 
    <event jobid="1"> 
    <title>jobtitle</title> 
    <desc>description</desc> 
    <date>postdate</date> 
    </event> 
    <event jobid="2"> 
    <title>jobtitle</title> 
    <desc>description</desc> 
    <date>postdate</date> 
    </event> 
    <event jobid="3"> 
    <title>jobtitle</title> 
    <desc>description</desc> 
    <date>postdate</date> 
    </event> 
    </jobs> 

我創建了一個PHP腳本,我拿作業ID從用戶和提交和刪除事件的孩子誰擁有作業ID。

但問題是,當我創建一個新的工作,我得到一個重複的jobid,因爲當我創建新的工作事件我使用$ jobid = $ xmlobj-> count()+ 1;

有人可以幫助我。我更喜歡使用PHP腳本,但Java腳本也可以。

編輯:

這裏是我的代碼刪除:

<?php 
    $jobs = simplexml_load_file('jobs.xml'); 
    $jobid = $_POST['jobid']; 
    foreach ($jobs->children() as $event) { 
    if($event->attributes()->jobid == $jobid) 
    { 
     $dom=dom_import_simplexml($event); 
    $dom->parentNode->removeChild($dom); 
    } 
    } 
    $jobs->asXML('jobs.xml'); 
    ?> 

回答

0

請注意:這僅適用於新創建的文件的工作。現有文件需要在根元素<jobs>上手動添加next_jobid="N"

歡迎進一步的改進:

class JobsXML 
{ 
    public function __construct($filename) 
    { 
     $this->filename = $filename; 
     $this->dom = new DOMDocument; 
     $this->dom->formatOutput = true; 
     @$this->dom->load($filename); 
     $this->xpath = new DOMXPath($this->dom); 

     if ($this->xpath->query('//jobs')->length == 0) { 
      $this->root = $this->dom->createElement('jobs'); 
      $this->root->setAttribute('next_jobid', 1); 
      $this->dom->appendChild($this->root); 
     } else { 
      $this->root = $this->xpath->query('//jobs')->item(0); 
     } 
    } 

    public function insertEvent($title, $desc, $date) 
    { 
     $next_jobid = $this->root->getAttribute('next_jobid'); 
     $event = $this->dom->createElement('event'); 
     $event->setAttribute('jobid', $next_jobid); 
     $event->appendChild($this->dom->createElement('title', $title)); 
     $event->appendChild($this->dom->createElement('desc', $desc)); 
     $event->appendChild($this->dom->createElement('date', $date)); 
     $this->root->appendChild($event); 
     $this->root->setAttribute('next_jobid', intval($next_jobid) + 1); 
    } 

    public function removeEvent($jobid) 
    { 
     foreach ($this->xpath->query("//event[@jobid=$jobid]") as $node) { 
      $node->parentNode->removeChild($node); 
     } 
    } 

    public function save() 
    { 
     $this->dom->save($this->filename); 
    } 
} 

插入事件:

$jobs = new JobsXML('jobs.xml'); 
$jobs->insertEvent('jobtitle', 'description', 'postdate'); 
$jobs->save(); 

刪除事件:

$jobs = new JobsXML('jobs.xml'); 
$jobs->removeEvent(1); 
$jobs->save(); 
+0

@Paulo ..我終於有時間處理你的代碼,並能夠做出必要的修改。它的工作現在很好。謝謝。 –

+0

@MalavShah不客氣!我很高興能夠幫助你! :) –

0
$jobs = simplexml_load_file('jobs.xml'); 
$jobid = 1; 
foreach ($jobs->children() as $event) { 
    if($event->attributes()->jobid == $jobid){ 
     $dom=dom_import_simplexml($event); 
     $dom->parentNode->removeChild($dom); 
    } 
} 

echo $jobs->asXML(); 
+0

你的代碼,幫助我從我的XML刪除事件。但我還有一個問題。當我創建一個新的工作時,我使用jobid = $ xmlobj-> count()+ 1;這使得重複的jobid。有沒有一種方法可以訪問最後一個事件的jobid值,然後增加該值? –

+0

你可以粘貼你的代碼嗎? –