2012-07-23 184 views
0

我在从我的iTunes XML源获取信息有些麻烦,你可以偷看这里:http://c3carlingford.org.au/podcast/C3CiTunesFeed.xml阅读iTunes的XML文件

我需要从每个内部<item>标签获取信息。其中之一的例子如下:

<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> 

我现在已经取得了一些成功! 我已经能够拿到冠军了这一切:

<?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 />'; 
    }; 

?> 

但我似乎无法得到任何东西了...我是新来的这一切!


所以我需要出去包括:

  1. <itunes:author>值。
  2. <enclosure>标签

会有人帮我获得这两个值进行url属性值?

+0

为什么DOMDocument而不是SimpleXML? http://php.net/manual/en/book.simplexml.php – 2012-07-23 12:43:35

回答

5

您可以使用DOMXPath做到这一点,让您的生活轻松了许多:

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

您可以从the demo看到,这将输出:

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

当我将它粘贴到我的文档中时遇到了问题... – 2012-07-23 23:27:47

+0

@BenPotter - “有问题”不是错误消息。出了什么问题? – nickb 2012-07-23 23:46:57

+0

哈哈对不起 - 这是早上在这里。我正确地将您的代码复制并粘贴到我的网站上 - 但我需要设置$ xml变量。当它位于:http://c3carlingford.org.au/podcast/C3CiTunesFeed.xml时,我该如何做到这一点? 我试过这样,但它没有工作:$ xml = simplexml_load_file(“http://c3carlingford.org.au/podcast/C3CiTunesFeed.xml”); – 2012-07-24 00:00:51

1

是的,你可以做到这一点simplexml的。

下面是示例代码:

<?php 

$x = simplexml_load_file("http://c3carlingford.org.au/podcast/C3CiTunesFeed.xml"); 

    foreach ($x->channel->item as $item) { 
    $otherNode = $item->children('http://www.itunes.com/dtds/podcast-1.0.dtd'); 
    echo $item->title .'---'.$otherNode->author; 
    echo "\n"; 
} 
?> 

输出:

当毒蛇咬你---诗怎么办。菲尔Buechler

活水,让河水流!--- Ps。菲尔Buechler

上帝的呼唤宽恕彼此AM & PM --- Ps。理查德·博塔

神的呼召来传福音AM PM & ---罗布·沃

神的呼唤彼此相爱AM PM & ---罗布·沃

希望这有助于!

+0

这很好 - 但我也需要机箱选项卡中的url属性。 – 2012-07-23 23:26:04