【问题标题】:Accessing items in an RSS feed using SimpleXMLElement [duplicate]使用 SimpleXMLElement 访问 RSS 提要中的项目 [重复]
【发布时间】:2018-10-04 05:14:58
【问题描述】:

我正在尝试使用 PHP 阅读 this RSS feed。来自 XML 的小 sn-p:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:cc="http://web.resource.org/cc/"
   xmlns:rss="http://purl.org/rss/1.0/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   xmlns:prism="http://prismstandard.org/namespaces/basic/2.0/"
   xmlns:dc="http://purl.org/dc/elements/1.1/">
   <rss:channel rdf:about="https://onlinelibrary.wiley.com/loi/18630669?af=R">
      <rss:title>Wiley: CLEAN – Soil, Air, Water: Table of Contents</rss:title>
      <rss:description>Table of Contents for CLEAN – Soil, Air, Water. List of articles from both the latest and EarlyView issues.</rss:description>
      <rss:link>https://onlinelibrary.wiley.com/loi/18630669?af=R</rss:link>
      <dc:title>Wiley: CLEAN – Soil, Air, Water: Table of Contents</dc:title>
      <dc:publisher>Wiley</dc:publisher>
      <dc:language>en-US</dc:language>
      <prism:publicationName>CLEAN – Soil, Air, Water</prism:publicationName>
      <rss:items>
         <rdf:Seq>
            <rdf:li rdf:resource="https://onlinelibrary.wiley.com/doi/abs/10.1002/clen.201800305?af=R"/>
            <rdf:li rdf:resource="https://onlinelibrary.wiley.com/doi/abs/10.1002/clen.201700117?af=R"/>
         </rdf:Seq>
      </rss:items>
   </rss:channel>
   <rss:image rdf:about="http://www.atypon.com/images/atypon_logo_small.gif">
      <rss:title>CLEAN – Soil, Air, Water</rss:title>
      <rss:url>http://www.atypon.com/images/atypon_logo_small.gif</rss:url>
      <rss:link>https://onlinelibrary.wiley.com/loi/18630669?af=R</rss:link>
   </rss:image>
   <rss:item rdf:about="https://onlinelibrary.wiley.com/doi/abs/10.1002/clen.201800305?af=R">
      <rss:title>The Limiting Factor to the Outbreak of Lake Black Bloom: Roles of Ferrous Iron and Sulfide Ions</rss:title>
      <dc:description>
         abc
      </dc:description>
      <dc:creator>
         Qiushi Shen, 
         Chengxin Fan, 
         Cheng Liu, 
         Chao Chen
      </dc:creator>
      <rss:link>https://onlinelibrary.wiley.com/doi/abs/10.1002/clen.201800305?af=R</rss:link>
      <content:encoded>CLEAN – Soil, Air, Water, &lt;a href="https://onlinelibrary.wiley.com/toc/18630669/2018/46/9"&gt;Volume 46, Issue 9&lt;/a&gt;, September 2018. &lt;br/&gt;</content:encoded>
      <rss:description>CLEAN – Soil, Air, Water, Volume 46, Issue 9, September 2018. &lt;br/&gt;</rss:description>
      <dc:title>The Limiting Factor to the Outbreak of Lake Black Bloom: Roles of Ferrous Iron and Sulfide Ions</dc:title>
      <dc:identifier>doi:10.1002/clen.201800305</dc:identifier>
      <dc:source>CLEAN – Soil, Air, Water</dc:source>
      <dc:date>2018-08-19T07:00:00Z</dc:date>
      <prism:publicationName>CLEAN – Soil, Air, Water</prism:publicationName>
      <prism:volume>46</prism:volume>
      <prism:number>9</prism:number>
      <prism:coverDate>2018-08-19T07:00:00Z</prism:coverDate>
      <prism:coverDisplayDate>2018-08-19T07:00:00Z</prism:coverDisplayDate>
      <prism:doi>10.1002/clen.201800305</prism:doi>
      <prism:url>https://onlinelibrary.wiley.com/doi/abs/10.1002/clen.201800305?af=R</prism:url>
      <prism:copyright/>
   </rss:item>
   <rss:item rdf:about="https://onlinelibrary.wiley.com/doi/abs/10.1002/clen.201700117?af=R">
      <rss:title>A Pilot‐Scale Diatomite Membrane Bioreactor for Slightly Polluted Surface Water Treatment</rss:title>
      <dc:description>
         abc
      </dc:description>
      <dc:creator>
         Wen Sun, 
         Cuimei Li, 
         Bingzhi Dong, 
         Huaqiang Chu
      </dc:creator>
      <rss:link>https://onlinelibrary.wiley.com/doi/abs/10.1002/clen.201700117?af=R</rss:link>
      <content:encoded>CLEAN – Soil, Air, Water, &lt;a href="https://onlinelibrary.wiley.com/toc/18630669/2018/46/9"&gt;Volume 46, Issue 9&lt;/a&gt;, September 2018. &lt;br/&gt;</content:encoded>
      <rss:description>CLEAN – Soil, Air, Water, Volume 46, Issue 9, September 2018. &lt;br/&gt;</rss:description>
      <dc:title>A Pilot‐Scale Diatomite Membrane Bioreactor for Slightly Polluted Surface Water Treatment</dc:title>
      <dc:identifier>doi:10.1002/clen.201700117</dc:identifier>
      <dc:source>CLEAN – Soil, Air, Water</dc:source>
      <dc:date>2018-08-24T07:00:00Z</dc:date>
      <prism:publicationName>CLEAN – Soil, Air, Water</prism:publicationName>
      <prism:volume>46</prism:volume>
      <prism:number>9</prism:number>
      <prism:coverDate>2018-08-24T07:00:00Z</prism:coverDate>
      <prism:coverDisplayDate>2018-08-24T07:00:00Z</prism:coverDisplayDate>
      <prism:doi>10.1002/clen.201700117</prism:doi>
      <prism:url>https://onlinelibrary.wiley.com/doi/abs/10.1002/clen.201700117?af=R</prism:url>
      <prism:copyright/>
   </rss:item>

换句话说,结构是这样的:

  rdf:RDF
    (some items I don't care about)
    rss:item
    rss:item
    rss:item

我试图访问的是那些 rss:item 对象(一个接一个,做一个 foreach 循环)。我已经尝试了许多不同的版本:

$url = "https://onlinelibrary.wiley.com/action/showFeed?jc=18630669&type=etoc&feed=rss";
$xml = file_get_contents($url);
$xml = new SimpleXMLElement($xml);

$var = $xml->{'rdf:RDF'};

但它只返回object(SimpleXMLElement)[598]。我无法访问这些项目。我已经尝试使用 $xml->children() 以及 $xml->{'rss:item'} 和许多其他选项,但我只返回 SimpleXMLElement 对象,无法访问信息;永远不要包含所有项目的数组。

【问题讨论】:

    标签: php xml rss simplexml


    【解决方案1】:

    如果要输出&lt;rss:item&gt;数据,那么最简单的方法是获取根元素的children(),但是从命名空间前缀rss(调用$xml-&gt;children("rss", true))。这将允许您使用对象表示法访问所有数据(对于 SimpleXML 来说是正常的)。

    $url = "https://onlinelibrary.wiley.com/action/showFeed?jc=18630669&type=etoc&feed=rss";
    $xml = file_get_contents($url);
    $xml = new SimpleXMLElement($xml);
    
    foreach ( $xml->children("rss", true)->item as $item ) {
        echo (string)$item->title.PHP_EOL;
    }
    

    它输出每个项目的标题元素(echo (string)$item-&gt;title.PHP_EOL 行)(缩写)...

    The Limiting Factor to the Outbreak of Lake Black Bloom: Roles of Ferrous Iron and Sulfide Ions
    A Pilot‐Scale Diatomite Membrane Bioreactor for Slightly Polluted Surface Water Treatment
    Agronomic Valorization of Olive Mill Wastewaters: Effects on Medicago sativa Growth and Soil Characteristics
    

    需要注意的一点是,您说您只得到了object(SimpleXMLElement)[598],但 SimpleXMLElement 可能包含元素列表,这更多的是您如何使用该内容的情况。同样使用print_r() 或许多其他正常的查看内容的方式并不能为您提供完整的数据。对于 SimpleXML - 使用 echo $xml-&gt;asXML(); 查看它包含的内容。

    【讨论】:

    • 太好了,非常感谢!我在手册中找不到这方面的例子,但这非常有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 2010-11-22
    相关资源
    最近更新 更多