2010-01-29 6 views
0
내가 PHP의 XML 파일을 구문 분석하는 데 어려움을 겪고있어

: 여기PHP와 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> 

내 문제가되는 XML이다; 내가 사용할 때 :

$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);을 설정하고 오류가 있는지 확인할 수 있습니까? –

+0

오류는 없습니다. 그것은 모두 정상적으로 작동하지만, 단순히 값을 구문 분석하지 않습니다. – Oliver

답변

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"; 
}