Reading itunes XML file with PHP DOM method

itunes, parsing, php, xml, xml-parsing

Solution

You can use `DOMXPath` to do this and make your life a lot easier:

$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->loadXML( $xml); // $xml = file_get_contents( "http://www.c3carlingford.org.au/podcast/C3CiTunesFeed.xml")

// Initialize XPath    
$xpath = new DOMXpath( $doc);
// Register the itunes namespace
$xpath->registerNamespace( 'itunes', 'http://www.itunes.com/dtds/podcast-1.0.dtd');

$items = $doc->getElementsByTagName('item');    
foreach( $items as $item) {
    $title = $xpath->query( 'title', $item)->item(0)->nodeValue;
    $author = $xpath->query( 'itunes:author', $item)->item(0)->nodeValue;
    $enclosure = $xpath->query( 'enclosure', $item)->item(0);
    $url = $enclosure->attributes->getNamedItem('url')->value;

    echo "$title - $author - $url\n";
}

You can see from the demo that this will output:

What to do when a viper bites you - Ps. Phil Buechler - http://www.ccccarlingford.org.au/podcast/C3C-20120722PM.mp3

Problem

I'm having some trouble in getting information from my itunes XML feed which you can peek at here: http://c3carlingford.org.au/podcast/C3CiTunesFeed.xml I need to get the information from each of the inner `<item>` tags. An example of one of these is as follows: ``` <item> <title>What to do when a viper bites you</title> <itunes:subtitle/> <itunes:summary/> <!-- 4000 Characters Max ******** --> <itunes:author>Ps. Phil Buechler</itunes:author> <itunes:image href="http://www.c3carlingford.org.au/podcast/itunes_cover_art.jpg"/> <enclosure url="http://www.ccccarlingford.org.au/podcast/C3C-20120722PM.mp3" length="14158931" type="audio/mpeg"/> <guid isPermaLink="false">61bc701c-b374-40ea-bc36-6c1cdaae8042</guid> <pubDate>Sun, 22 Jul 2012 19:30:00 +1100</pubDate> <itunes:duration>40:01</itunes:duration> <itunes:keywords> Worship, Reach, Build, Holy Spirit, Worship, C3 Carlingford </itunes:keywords> </item> ``` Now i have had some success! I have been able to get the title out of it all: ``` <?php $dom = new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->load('http://c3carlingford.org.au/podcast/C3CiTunesFeed.xml'); $items = $dom->getElementsByTagName('item'); foreach($items as $item){ $title = $item->getElementsByTagName('title')->item(0)->nodeValue; echo $title . '<br />'; }; ?> ``` But I can't seem to get anything else out... I'm new to all this! So What I need to get out includes: - The `<itunes:author>` value. - The url attribute value from the `<enclosure>` tag Would someone help me getting these two values out?

Original source