【问题标题】:Reading itunes XML file with PHP DOM method使用 PHP DOM 方法读取 iTunes XML 文件
【发布时间】:2012-07-21 16:47:19
【问题描述】:

我在从我的 iTunes XML 提要中获取信息时遇到了一些麻烦,您可以在此处查看:http://c3carlingford.org.au/podcast/C3CiTunesFeed.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. &lt;itunes:author&gt; 值。
  2. &lt;enclosure&gt; 标记中的 url 属性值

有人能帮我找出这两个值吗?

【问题讨论】:

标签: php xml parsing xml-parsing itunes


【解决方案1】:

您可以使用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

【讨论】:

  • @BenPotter - “遇到麻烦”不是错误消息。怎么了?
  • 哈哈抱歉——这里是早上。我可以在我的网站上复制并粘贴您的代码 - 但我需要设置 $xml 变量。当它位于:c3carlingford.org.au/podcast/C3CiTunesFeed.xml 时,我该怎么做?我试过这样但没有用: $xml = simplexml_load_file("c3carlingford.org.au/podcast/C3CiTunesFeed.xml");
  • 设置$xml = file_get_contents( "http://www.c3carlingford.org.au/podcast/C3CiTunesFeed.xml");
  • 效果非常好 - 您介意为其他观众编辑您的答案吗?感谢您的所有帮助!
【解决方案2】:

是的,你可以用 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";
 } 
?> 

输出:

当毒蛇咬你时该怎么办---Ps。菲尔·比克勒

活水,让河流流动!---Ps。菲尔·比克勒

上帝对彼此宽恕的呼唤上午和下午---Ps。理查德·博塔

上帝对上午和下午传福音的呼召---Rob Waugh

上帝对彼此相爱的呼唤上午和下午---Rob Waugh

希望对您有所帮助!

【讨论】:

  • 这很好 - 但我也需要附件选项卡中的 url 属性。
【解决方案3】:

你可以使用simpleXMLchildren

$item->children('itunes', TRUE);

所以你有一个包含所有标签的数组 itunes:duration, itunes:subtitle ....

<?php

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

  foreach ($x->channel->item as $item) { 
    $otherNode = $item->children('itunes', TRUE); 
    echo $otherNode->duration;
    echo "\n";
    echo $otherNode->author; 
    echo "\n";
    echo $otherNode->subtitle; 
    echo "\n";
  } 
?> 

【讨论】:

    猜你喜欢
    • 2010-11-21
    • 1970-01-01
    • 2011-12-21
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    相关资源
    最近更新 更多