Rename an XML node using PHP -


i'm trying figure out how rename node in xml using php?

i have come far:

$dom = new domdocument( '1.0' ); $dom->preservewhitespace = false; $dom->formatoutput = true;  // load xml file $dom->loadxml( '<?xml version="1.0" encoding="iso-8859-1"?> <library>   <data>     <invite>       <username>jmansa</username>       <userid>1</userid>     </invite>     <update>1</update>   </data> </library>', libxml_noblanks ); $xpath = new domxpath($dom);  //find 'data' nodes. $node = $xpath->query("//data");  // if found if( $node->length ) {     foreach ($node $n) {        // rename here? //     } }  echo "<xmp>". $dom->savexml() ."</xmp>"; 

now, want rename <data> <invites>. can done , if yes, how?

a node's name ("data" or "invites" respectively) cannot renamed via dom because node::nodename property read-only.

you can create new node named "invites", append before "data" node, move children of "data" new "invites" node, remove "data" node, , output tree result.

example:

<?php // create test document.     $dom = new domdocument( '1.0' );     $dom->preservewhitespace = false;     $dom->formatoutput = true;  // load xml file.     $dom->loadxml('<?xml version="1.0" encoding="iso-8859-1"?'.'>     <library>       <data attr1="1" attr2="2">         <invite>           <username>jmansa</username>           <userid>1</userid>         </invite>         <update>1</update>       </data>     </library>', libxml_noblanks );     $xpath = new domxpath($dom);      // convert <data> <invites>.     if ($datanode = $xpath->query("/library/data")->item(0))     {     // create <invites> node.         $invitesnode = $dom->createelement('invites');         $dataattrs   = $datanode->attributes;         foreach ($dataattrs $dataattr)         {   $invitesnode->setattributenodens($dataattr->clonenode());   }         $dom->documentelement->appendchild($invitesnode);      // move <data> children over.         if ($childnodes = $xpath->query("/library/data/*"))         {             foreach ($childnodes $childnode)             {   $invitesnode->appendchild($childnode);  }         }      // remove <data>.         $datanode->parentnode->removechild($datanode);     }  // test result.     echo $dom->savexml(); ?> 

Comments

Popular posts from this blog

Unable to remove the www from url on https using .htaccess -