2010-01-29 80 views
0

我掙扎解析PHP中的XML文件:PHP和XML解析

這裏的XML

<rss xmlns:ac="http://palm.com/app.catalog.rss.extensions" version="2.0"> 
     <channel> 
    <title>Device App Updates for US</title> 
    <link>http://www.palm.com</link> 
    <description>Updates</description> 
    <language>en-US</language> 
    <pubDate>Mon, 04 Jan 2010 18:23:51 -0800</pubDate> 
    <lastBuildDate>Mon, 04 Jan 2010 18:23:51 -0800</lastBuildDate> 
    <ac:distributionChannel>Device</ac:distributionChannel> 
    <ac:countryCode>US</ac:countryCode> 
    <item> 
    <title><![CDATA[My App]]></title> 
    <link>http://developer.palm.com/appredirect/?packageid=com.palm.myapp</link> 
    <description><![CDATA[My fun app.]]></description> 
    <pubDate>2009-12-21 21:00:58</pubDate> 
    <guid>334.232</guid>  
    <ac:total_downloads>1234</ac:total_downloads> 
    <ac:total_comments>12</ac:total_comments>  
    <ac:country>US</ac:country> 

    </item> 
    </channel> 
</rss> 

我的問題是;當我使用:

$strURL = "http://developer.palm.com/rss/D/appcatalog.update.rss.xml"; 

$ch = curl_init($strURL); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$data = curl_exec($ch); 
curl_close($ch); 
$doc = new SimpleXmlElement($data, LIBXML_NOCDATA); 
     print_r($doc); 

我無法顯示值?我最感興趣的是<ac:total_downloads>1000</ac>,但我似乎無法解析它。

我在做什麼錯?

非常感謝

+0

$數據實際上是否包含RSS? 「print_r」返回什麼?你可以設置'error_reporting(E_ALL);'並查看是否有任何錯誤? – 2010-01-29 10:39:50

+0

沒有錯誤;它一切正常,但它根本不解析任何值。 – Oliver 2010-01-29 10:55:08

回答

1

你並不需要使用捲曲來檢索文件,SimpleXML的可以獲取外部資源。

使用children()來訪問命名空間節點。下面是如何做到這一點:

$rss = simplexml_load_file($strURL); 
$ns = 'http://palm.com/app.catalog.rss.extensions'; 

foreach ($rss->channel->item as $item) 
{ 
    echo 'Title: ', $item->title, "\n"; 
    echo 'Downloads: ', $item->children($ns)->total_downloads, "\n\n"; 
}