alle childs verwijderen in xml
Ik ben al een tijdje aan het stoeien om in mijn (correct gevormde) xml een <data> node inclusief kids te verwijderen. Met het huidige script (zonder while loop) wordt alleen de eerste node verwijderd. wie kan mij helpen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if (isset($_REQUEST['test'])){
$dat=$_REQUEST['ordernummer'];
$xml = new DOMDocument("1.0", "UTF-8");
$xml->load("bijlages.xml");
$products = $xml->getElementsByTagName("data");
$length = $products->length;
for ($x = $length-1; $x >= 0; $x--){
$ere = $products->item($x);
if ($ere->nodeValue == $_REQUEST['test']) {
$ere->parentNode->removeChild($ere->parentNode->firstChild);
}
echo $xml->saveXML();
}
else { exit;}
?>
if (isset($_REQUEST['test'])){
$dat=$_REQUEST['ordernummer'];
$xml = new DOMDocument("1.0", "UTF-8");
$xml->load("bijlages.xml");
$products = $xml->getElementsByTagName("data");
$length = $products->length;
for ($x = $length-1; $x >= 0; $x--){
$ere = $products->item($x);
if ($ere->nodeValue == $_REQUEST['test']) {
$ere->parentNode->removeChild($ere->parentNode->firstChild);
}
echo $xml->saveXML();
}
else { exit;}
?>
Gewijzigd op 04/02/2018 10:10:37 door Robert Schipper
getElementsByTagName Return Values: A new DOMNodeList object containing all the matched elements.
Houdt dat niet in dat je iets uit een kopie verwijdert? Hoe er vervolgens ook iets verdwijnt uit het origineel is mij overigens een raadsel?
Zolang je de mutaties niet op $root uitvoert verandert er niets (in $xml)? Misschien helpt het eerste voorbeeld van removeChild() je verder? Verder is het wellicht handig om klasse-aanduidingen mee te geven aan je variabelen. Of commentaar bij de code, nu is het nogal een wirwar van variabelen.
Houdt dat niet in dat je iets uit een kopie verwijdert? Hoe er vervolgens ook iets verdwijnt uit het origineel is mij overigens een raadsel?
Zolang je de mutaties niet op $root uitvoert verandert er niets (in $xml)? Misschien helpt het eerste voorbeeld van removeChild() je verder? Verder is het wellicht handig om klasse-aanduidingen mee te geven aan je variabelen. Of commentaar bij de code, nu is het nogal een wirwar van variabelen.
Je hebt gelijk, er stonden een aantal onnodige variabelen in de code. Ik heb de code aangepast. Het klopt dat je een kopie aanpast van het orgineel. Dit is volgens mij standaard procedure voor de DOM. Dit is momenteel echter nog niet een issue. Mijn response is zonder while loop wel wat ik verwacht. Door bovenstaande code wordt netjes de firstChild van elke data node met gegeven ordernummer verwijderd. Het probleem is dat ik alle ouders (inclusief kinderen) wil verwijderen waar ordernummer een bepaalde waarde heeft. Hiervoor zou ik vermoedelijk met een while loop door de parent van <ordernummer> moeten lopen. Het opzetten van de while loop lukt echter niet.
Geef eens een voorbeeld van een XML, en hoe het resultaat er dan uit zou moeten zien.