Jump to content

Inserting a XML node at a specific location


leon_nerd

Recommended Posts

Hi Guys,

 

I want to insert a node with children at a specific location in the XML file. How do I do it?

 

For eg. If I have an XML like:

 

<myvalues>
     <image name="img01">
        <src>test</src>
     </image>

     <image name="img02">
        <src>test</src>
     </image>

     <image name="img03">
        <src>test</src>
     </image>
</myvalues>

 

I want to insert:

       

<image name="img11">
     <src>test</src>
  </image>

 

between <image name="img01"> & <image name="img02">. How do I do this? I am using SimpleXML right now to read the XML.

 

Thanks.

$element = $doc->createElement( 'image' )->appendChild( $doc->createElement( 'src', 'test' ) );

$element->setAttribute( 'name' , 'img11' );

 

$doc->insertBefore($element, $xpath->query( '//[@name=img02]' )->item( 0 ));

Thanks. I tried this code but it is inserting the new node at the end of the XML file, outside the XML structure.

 

I am using the following code:

 

$xml = new DomDocument();


$xml->preserveWhitespace = false;
$xml->load('myXMLFile.xml');

$newNode = $xml->createElement('tryimage');

$xpath = new DOMXpath($xml);
$elements = $xpath->query('/myvalues/image[name="img01"]');

$refNode = $elements->item(0);

$xml->insertBefore($newNode, $refNode->nextSibling);


header('Content-Type: text/plain');
echo $xml->saveXML();

 

and the output is:

 

<xml....>
   <myvalues>
     <image name="01">
     </image>
     .
     .
     .
   </myvalues>
<tryimage />

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.