2
    $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 格式。但如果未能取出卡。任何人都可以帮忙吗?

<root>
  <card>
    <cardnumber>12345</cardnumber>
    <name>Tan</name>
  </card>
  ....
</root>
4

3 回答 3

3

<card>id=2with删除simplexml

$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

于 2013-04-23T10:45:09.433 回答
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');

(或者)

print $xmldoc->saveXML();
于 2013-04-23T10:24:20.327 回答
0
$xmlDoc->getElementsByTagName("nameNode")->item(0)->parentNode
    ->removeChild($xmlDoc->getElementsByTagName("nameNode")->item(0));
于 2017-04-27T19:03:26.743 回答