Re: Append Dom Document

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux