2013-04-23 79 views
1
$xmldoc = new DOMDocument(); 
    $xmldoc->load('card.xml'); 
    $root = $xmldoc->documentElement; 
    $fnode = $root->firstChild; 
    // we retrieve the chapter and remove it from the book 
    $items = $xmldoc->getElementsByTagName('card'); 
    foreach ($items as $item){ 
     $node = $item->getElementsByTagName('cardnumber')->item(0); 
     if ($node->nodeValue == $this->cardnumber){ 
      $node->parentNode->removeChild($node); 
      $xmldoc->saveXML(); 
     } 
    } 

上面是我用來刪除卡節點的代碼,如果卡號匹配,下面是我的XML格式。但如果未能取出該卡。誰能幫忙?在PHP中刪除XML節點

<root> 
    <card> 
    <cardnumber>12345</cardnumber> 
    <name>Tan</name> 
    </card> 
    .... 
</root> 
+0

爲什麼你在'$ xmldoc-> saveXML();'循環內? 'saveXML'返回xml字符串 - 我想你需要的是'$ xmldoc-> save([file]'[http://www.php.net/manual/en/domdocument.save.php](http:/ /www.php.net/manual/en/domdocument.save.php) – Adidi 2013-04-23 10:21:04

+0

我可以做插入,現在我想要刪除 – user236501 2013-04-23 10:22:02

+0

我認爲@Adidi的說法基本上是你刪除後沒有保存文件,所以任何你所做的更改都被遺忘了 – 2013-04-23 10:23:47

回答

0

您刪除節點的方式是正確的。但是,您可以在saveXml()後將其保存在xml中,或者您只需打印新的xml並檢查已完成的更新。並且根據你的邏輯保存應該在循環之後完成。 (即)如下,

$xmldoc = new DOMDocument(); 
$xmldoc->load('card.xml'); 
$root = $xmldoc->documentElement; 
$fnode = $root->firstChild; 
// we retrieve the chapter and remove it from the book 
$items = $xmldoc->getElementsByTagName('card'); 
foreach ($items as $item){ 
    $node = $item->getElementsByTagName('cardnumber')->item(0); 
    if ($node->nodeValue == $this->cardnumber){ 
     $node->parentNode->removeChild($node);    
    } 
} 
$xmldoc->save('newXmlFile.xml'); 

(OR)

print $xmldoc->saveXML(); 
+0

嗨,如果我想刪除整個卡,而不是特定的cardnumber節點,到目前爲止,它只會刪除cardnumber節點整個卡。 – user236501 2013-04-23 10:39:11

2

刪除<card>id=2simplexml

$xml = simplexml_load_string($x); // assume XML in $x 
$i = count($xml) - 1; 

for ($i; $i >= 0; $i--) { 
    $card = $xml->card[$i]; 
    if ($card['id'] == "2") unset($xml->card[$i]); 
} 

看到它的工作:http://codepad.viper-7.com/9cX1qR

0
$xmlDoc->getElementsByTagName("nameNode")->item(0)->parentNode 
    ->removeChild($xmlDoc->getElementsByTagName("nameNode")->item(0));