On Thu, May 13, 2010 at 7:46 PM, Alice Wei <ajwei@xxxxxxxxxxxxx> wrote: > > Hi, > > I am trying to create a news feed page that loads a number of different feeds depending on what options the user selects. For some reason, I could not figure out how to get the dom document to "append" the different xml documents that get created. > > Below is the code, and obviously now every time when I try to have a new item selected, then it displays that element's > > <?php > > $q=$_GET["q"]; > $q2 = explode(" ",$q); > $count = count($q2); > > for($i=0;$i<$count;$i++) { > > //find out which feed was selected > switch ($q2[$i]) { > case "Weather": > $xml=("http://rss.weather.com/rss/national/rss_nwf_rss.xml?cm_ven=NWF&cm_cat=rss&par=NWF_rss"); > break; > > case "NFL": > $xml = ("http://www.nfl.com/rss/rsslanding?searchString=home"); > break; > > default: > exit; > break; > } > } > > $xmlDoc = new DOMDocument(); > $xmlDoc->load($xml); > > //get and output "<item>" elements > $x=$xmlDoc->getElementsByTagName('item'); > for ($i=0; $i<=4; $i++) > { > $item_title=$x->item($i)->getElementsByTagName('title') > ->item(0)->childNodes->item(0)->nodeValue; > $item_link=$x->item($i)->getElementsByTagName('link') > ->item(0)->childNodes->item(0)->nodeValue; > $item_desc=$x->item($i)->getElementsByTagName('description') > ->item(0)->childNodes->item(0)->nodeValue; > > echo ("<p><a href='" . $item_link > . "'>" . $item_title . "</a>"); > echo ("<br />"); > echo ($item_desc . "</p>"); > } > > ?> > > > Is there such a function where I could allow my dom document here append and not have to create a new one every time when a new selection is made? > > Thanks for your help. > > Alice > First, I don't see where you need to append anything. Your code simply opens XML documents that you fetch from remote sources and iterates through the nodes in each document to echo links to the articles. If that's all you need, what you have looks like it will work just fine. If you are concerned about the overhead of creating a new DOMDocument each time through the loop, you could move that step outside the loop. Every time you run $xmlDoc->load($xml) it will replace the existing contents with the new contents. However, I suspect that instantiating a new object is fairly cheap compared to the rest of the actions in your loop, so I doubt you'll save much. As for your original question, if you really need to append multiple XML documents into a single document using DOM, you would need to create a DOMDocument outside the loop that contains your aggregator's information in the header and that will contain the aggregated items. Then inside your loop you would still load each feed into a separate DOMDocument instance just as you are now and import the nodes from the rss feed into your aggregated document. Andrew -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php