how delete node in xml file using php?

How can I delete and edit a specific node within a XML file by using php?

Abisha at Stack Overflow Visit the source

Was this solution helpful to you?

Other answers

I use the http://sg.php.net/dom library to traverse and manipulate XML documents. Before you can delete or edit a node, you will need to load your XML document into a DOMDocument object: $domDocument = new DOMDocument(); $domDocument->load('youfile.xml'); There are many ways to find the node you are after. One of them is performing a query using the XPath for the node: $xmlPath = new DOMXPath($domDocument); $xmlNodes = $xmlPath->query('//graphics'); $xmlNodes is an array of http://sg.php.net/manual/en/class.domelement.php. They have their own functions to delete or edit the particular nodes you are after. For example you can get all of them and delete certain attributes: foreach($xmlNodes as $node) { $node->removeAttribute('size'); } Once you are done, you can save your changes to file: $domDocument->save('yourfile.xml');

Marcel Tjandraatmadja

You could use the xml2array function, and then threat it like an array: function xml2array($contents, $get_attributes=1){ if(!$contents) return array(); if(!function_exists('xml_parser_create')){ print "'xml_parser_create()' function not found!"; return array(); } //Get the XML parser of PHP - PHP must have this module for the parser to work $parser = xml_parser_create(); xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, 0 ); xml_parser_set_option( $parser, XML_OPTION_SKIP_WHITE, 1 ); xml_parse_into_struct( $parser, $contents, $xml_values ); xml_parser_free( $parser ); if(!$xml_values) return;//Hmm... //Initializations $xml_array = array(); $parents = array(); $opened_tags = array(); $arr = array(); $current = &$xml_array; //Go through the tags. foreach($xml_values as $data){ unset($attributes,$value);//Remove existing values, or there will be trouble //This command will extract these variables into the foreach scope // tag(string), type(string), level(int), attributes(array). extract($data);//We could use the array by itself, but this cooler. $result = ''; if($get_attributes){//The second argument of the function decides this. $result = array(); if(isset($value)) $result['value'] = $value; //Set the attributes too. if(isset($attributes)){ foreach($attributes AS $attr => $val){ if($get_attributes == 1) $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr' /** :TODO: should we change the key name to '_attr'? Someone may use the tagname 'attr'. Same goes for 'value' too */ } } }else if(isset($value)){ $result = $value; } //See tag status and do the needed. if($type == "open"){//The starting of the tag '<tag>' $parent[$level-1] = &$current; if(!is_array($current) OR (!in_array($tag, array_keys($current)))){//Insert New tag $current[$tag] = $result; $current = &$current[$tag]; }else{ //There was another element with the same tag name if(isset($current[$tag][0])){ array_push($current[$tag], $result); }else{ $current[$tag] = array($current[$tag],$result); } $last = count($current[$tag]) - 1; $current = &$current[$tag][$last]; } }else if($type == "complete"){//Tags that ends in 1 line '<tag />' //See if the key is already taken. if(!isset($current[$tag])){//New Key $current[$tag] = $result; }else{//If taken, put all things inside a list(array) if((is_array($current[$tag]) and $get_attributes == 0)//If it is already an array... or (isset($current[$tag][0]) and is_array($current[$tag][0]) and $get_attributes == 1)){ array_push($current[$tag],$result); // ...push the new element into that array. }else{//If it is not an array... $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value } } }else if($type == 'close'){ //End of tag '</tag>' $current = &$parent[$level-1]; } } return($xml_array); }

Strae

SimpleXML was new to PHP 5. <?php $xml = simplexml_load_file("test.xml"); ?> Once your XML is loaded into a simpleXML object you can locate the specific node and 'unset' it to delete it.

Jon Winstanley

Related Q & A:

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.