Mijn bedoeling is volgens mij vrij duidelijk, een XML laden, nodes er uit trekken via XPath en deze verwijderen. Klinkt simpel maar is het blijkbaar niet.
Momenteel heb ik volgende code:
Het probleem is dat DOMXPath een lijst van DOMElement objecten returned, en enkel op DOMNode zit een functie unlink_node()...
met volgende code lukt het wel, maar zoals je wel kan afleiden is dit niet echt performant...
Heb niet zoveel ervaring met XML en php, maar het zou mij verbazen als je enkel een bepaalde node kan verwijderen door heel het document te loopen....
Momenteel heb ik volgende code:
PHP:
1
2
3
4
5
6
7
8
9
| $doc = new DOMDocument(); $doc->load($this->_xmlFile); $xpath = new DOMXPath($doc); $result = $xpath->query("//content/images/image[@id='{$id}']"); foreach ($result as $node){ $node->unlink_node(); } $doc->save($this->_xmlFile); |
Het probleem is dat DOMXPath een lijst van DOMElement objecten returned, en enkel op DOMNode zit een functie unlink_node()...
met volgende code lukt het wel, maar zoals je wel kan afleiden is dit niet echt performant...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| $doc = domxml_open_file($this->_xmlFile, DOMXML_LOAD_PARSING + //0 DOMXML_LOAD_COMPLETE_ATTRS + //8 DOMXML_LOAD_SUBSTITUTE_ENTITIES + //4 DOMXML_LOAD_DONT_KEEP_BLANKS //16 ); $root = $doc->document_element(); $images = $root->child_nodes(); $image = $images[0]->child_nodes(); foreach ($image as $node){ if ($node->get_attribute("id") == $id){ $node->unlink_node(); } } $doc->dump_file($this->_xmlFile); |
Heb niet zoveel ervaring met XML en php, maar het zou mij verbazen als je enkel een bepaalde node kan verwijderen door heel het document te loopen....

[ Voor 4% gewijzigd door Mythix op 20-02-2009 09:45 . Reden: DomXML->asXML() crashes apache... vervangen door DomXML->dump_file() ]
Whenever you find yourself on the side of the majority, it is time to pause and reflect