XML RSS Feed Ayrıştırma PHP

2 Cevap php

Şöyle bir XML beslemesi ile:

<w:current temperature="22.2" dewPoint="12.9" humidity="56" windSpeed="5.6" windGusts="9.3" windDirection="ESE" pressure="1017.8" rain="0.0" />

ve

<w:forecast day="Thursday" description="Mostly Sunny. Warm." min="17" max="29" icon="2" iconUri="http://www.weather.com.au/images/icons/2.gif" iconAlt="Mostly Sunny" />

Onu nasıl dom kullanarak PHP ayrıştırmak?

$doc = new DOMDocument();
$doc->load('http://rss.weather.com.au/sa/adelaide');
$arrFeeds = array();
foreach ($doc->getElementsByTagName('item') as $node) {
    $itemRSS = array ( 
        'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
        'description' => $node->getElementsByTagName('w')->item(0)->nodeValue,
        );
    array_push($arrFeeds, $itemRSS);
}

İade hatası: Notice: Trying to get property of non-object in /var/www/index.php on line 123

2 Cevap

Ben şahsen bunun için SimpleXML kullanmak istiyorum, sadece burada (vb işleme hiçbir hata ile) küçük bir örnek Ben ettik ki var, akılda hava durumu verileri taşımak için kullanılan özel bir ad taşımaları gerekir sadece test edilmiş ve mevcut hava getirir.

//Fetch the feed
$feed = file_get_contents("http://rss.weather.com.au/sa/adelaide");
//Load it into simplexml
$weather = simplexml_load_string($feed);
//Get namespace descendants using the w namespace defined in the feed
$channelelements = $weather->channel->item->children("http://rss.weather.com.au/w.dtd");
//Looping through each of the attributes and echoing them, you can do what you want with them at this point
foreach($channelelements->attributes() as $k => $attr) {
    echo $k.' = '.$attr.'<br />';
}

DOMDocument::getElementByTagNameNS ve muhtemelen de isteyeceksiniz DOMNode::lookupNamespaceURI öneki ile çalışmak için (örneğin, w) yerine ad URI daha (örneğin {[(3)] bak }).