[英]need help on removing child in xml using php
我正在嘗試使用php腳本從我的job.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腳本,在其中我從用戶那里獲取Jobid,然后提交並刪除具有該JobID的事件子級。
但是問題是當我創建一個新工作時,我得到的工作ID重復,就像我創建新工作事件時一樣,我使用$ 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');
?>
$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();
請注意:這僅適用於新創建的文件。 現有文件將需要在根元素
<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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.