2010-01-29 86 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"; 
}