troubleshooting Question

Adding elements inside root node using DOM with PHP

Avatar of duder78
duder78 asked on
PHPXML
2 Comments1 Solution873 ViewsLast Modified:
Hello,

I'm putting together a little web document that can update an XML file based on user input.  I can read the contents...that was the easy part.  Now I want to add elements to the file.  First, here's the structure of my XML file :

<?xml version="1.0" encoding="utf-8"?>
<advertisements date="03/03/2011">
	<item name="hamburger">
		<image>burger.jpg</image>
		<price>5.99</price>
		<metric>6 patties</metric>
		<description>Pellentesque sodales commodo ligula, id blandit urna semper id. Integer faucibus ligula ac risus laoreet ullamcorper. Nam ut elit velit. Sed in ante ante. Suspendisse enim eros, facilisis a gravida ut, sollicitudin eget vetit.</description>
	</item>
	<item name="jogging pants">
		<image>joggingpants.jpg</image>
		<price>15.99</price>
		<metric>1 pair</metric>
		<description>This is a fantastic pair of jogging pants from Giant Tiger.  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut bibendum, nunc a auctor adipiscing, eros urna imperdiet purus, ut bibendum tellus lacus sed tellus. Ut ipsum augue, dapibus vel placerat in, malesuada vitae nunc. Suspendisse semper placerat elit.</description>
	</item>
</advertisements>

All I want to do is add new a new item inside of the root node using the DOM.  In my code, I have taken the steps to create the new elements but can't figure out how to add them inside of the root <advertisements> node.  I'm sure it's ridiculously easy, but i've googled it at length and haven't stumbled upon anything yet.  Any help would be much appreciated.

Here's my PHP file :

$items = array();
  $items [] = array(
  'image' => 'dishes',
  'price' => 20.99,
  'metric' => 5,
  'description' => 'Maecenas risus massa, pulvinar at rhoncus vel, faucibus ut orci. Ut at tortor ornare neque convallis porttitor. Donec feugiat sem in leo feugiat imperdiet. Praesent vel pulvinar ante. Nulla eu diam erat, pellentesque vehicula elit. Aenean at erat mauris.'
  );
  
  $doc = new DOMDocument();
  $doc->formatOutput = true;
  $doc->load( 'XML/gt.xml' );
  
  $root = $doc->getElementsByTagName("advertisements");

  foreach( $items as $item )  {
  
  $new_item = $doc->createElement( "item" );
  
  $image = $doc->createElement( "image" );
  $image->appendChild(
  $doc->createTextNode( $item['image'] )
  );
  $new_item->appendChild( $image );
  
  $price = $doc->createElement( "price" );
  $price->appendChild(
  $doc->createTextNode( $item['price'] )
  );
  $new_item->appendChild( $price );
  
  $metric = $doc->createElement( "metric" );
  $metric->appendChild(
  $doc->createTextNode( $item['metric'] )
  );
  $new_item->appendChild( $metric );
  
  $description = $doc->createElement( "description" );
  $description->appendChild(
  $doc->createTextNode( $item['description'] )
  );
  $new_item->appendChild( $description );
  
  $root->appendChild( $new_item );
  }
  
  echo $doc->saveXML();

I'm getting a 'Fatal error: Call to undefined method DOMNodeList::appendChild() in C:\xampp\htdocs\XML\index2.php on line 46' error message.  I don't think it likes the line where I grab the root element using getElementsByTagName.  Thank you in advance...

ASKER CERTIFIED SOLUTION
merwetta1

Our community of experts have been thoroughly vetted for their expertise and industry experience.

Join our community to see this answer!
Unlock 1 Answer and 2 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 2 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros