My question is best phrase as: Remove a child with a specific attribute, in SimpleXML for PHP
except I’m not using simpleXML.
I’m new to XML for PHP so I may not be doing the best way
I have a xml created using the $dom->save($xml) for each individual user. (not placing all in one xml due to undisclosed reasons)
It gives me that xml declaration <?xml version='1.0'?> (no idea how to make it to others, but that’s not the point, hopefully)
<?xml version='1.0'?> <details> <person>name</person> <data1>some data</data1> <data2>some data</data2> <data3>some data</data3> <category id='0'> <categoryName>Cat 1</categoryName> <categorydata1>some data</categorydata1> </category> <category id='1'> <categoryName>Cat 2</categoryName> <categorydata1>some data</categorydata1> <categorydata2>some data</categorydata2> <categorydata3>some data</categorydata3> <categorydata4>some data</categorydata4> </category> </details>
And I want to remove a category that has a specific attribute named id with the DOM class in php when i run a function activated from using a remove button.
the following is the debug of the function im trying to get to work. Can i know what I’m doing wrong?
function CatRemove($myXML){ $xmlDoc = new DOMDocument(); $xmlDoc->load( $myXML ); $categoryArray = array(); $main = $xmlDoc->getElementsByTagName( 'details' )->item(0); $mainElement = $xmlDoc->getElementsByTagName( 'details' ); foreach($mainElement as $details){ $currentCategory = $details->getElementsByTagName( 'category' ); foreach($currentCategory as $category){ $categoryID = $category->getAttribute('id'); array_push($categoryArray, $categoryID); if($categoryID == $_POST['categorytoremoveValue']) { return $categoryArray; } } } $xmlDoc->save( $myXML ); }
Well the above prints me an array of [0]->0 all the time when i slot the return outside the if. is there a better way? I’ve tried using getElementbyId as well but I’ve no idea how to work that.
I would prefer not to use an attribute though if that would make things easier.
Ok, let’s try this complete example of use: