在PHP中从第三方页面检索XML

时间:2010-06-17 14:17:13

标签: php xml

我需要读入并解析来自发送XML数据的第三方网站的数据。所有这些都需要在服务器端完成。

使用PHP执行此操作的最佳方法是什么?

4 个答案:

答案 0 :(得分:3)

您可以使用例如

获取远程XML数据
$xmldata = file_get_contents("http://www.example.com/xmldata");

curl。然后使用SimpleXMLDOM,无论如何。

答案 1 :(得分:1)

解析XML的好方法通常是使用XPP(XML Pull Parsing)librairy,PHP有一个实现它,它叫做XMLReader。

http://php.net/manual/en/class.xmlreader.php

答案 2 :(得分:1)

我建议你使用DOMDocument(PHP内联内置类) 其功能的一个简单示例可以是以下代码:

   /***********************************************************************************************
   Takes the RSS news feeds found at $url and prints them as HTML code.
   Each news is rendered in a <div class="rss"> block in the order: date + title + description. 
   ***********************************************************************************************/
   function Render($url, $max_feeds = 1000)
   {   
      $doc = new DOMDocument();

      if(@$doc->load($url, LIBXML_NOCDATA|LIBXML_NOBLANKS))
      {
         $feed_count = 0;
         $items = $doc->getElementsByTagName("item");
         //echo $items->length; //DEBUG
         foreach($items as $item)
         {              
                if($feed_count > $max_feeds)
                   break;

                //Unfortunately inside <item> node elements are not always in same order, therefor we have to call many times getElementsByTagName
                //WARNING: using iconv function instead of utf8_decode because this last one did not convert properly some characters like apostrophe 0x19 from techsport.it feeds.
                $title = iconv('UTF-8', 'CP1252', $item->getElementsByTagName("title")->item(0)->firstChild->textContent); //can use "CP1252//TRANSLIT"
                $description = iconv('UTF-8', 'CP1252', $item->getElementsByTagName("description")->item(0)->firstChild->textContent); //can use "CP1252//TRANSLIT"
                $link = iconv('UTF-8', 'CP1252', $item->getElementsByTagName("link")->item(0)->firstChild->textContent); //can use "CP1252//TRANSLIT"

                //pubDate tag is not mandatory in RSS [RSS2 spec: http://cyber.law.harvard.edu/rss/rss.html]
                $pub_date = $item->getElementsByTagName("pubDate"); $date_html = "";
                //play with date here if you want

                echo "<div class='rss'>\n<p class='title'><a href='" . $link . "'>" . $title . "</a></p>\n<p class='description'>" . $description . "</p>\n</div>\n\n";

                $feed_count++;
        }
      }
      else
         echo "<div class='rss'>Service not available.</div>";
   }

答案 3 :(得分:0)

我一直在使用simpleXML。