【问题标题】:Parse RSS/Atom feeds with PHP's HTML DomDocument使用 PHP 的 HTML DomDocument 解析 RSS/Atom 提要
【发布时间】:2012-09-18 22:29:02
【问题描述】:

如何使用以下代码查找命名空间 content:encoded 和 dc:creator 的值 不幸的是,我不能使用 simplepie 或 magpierss 甚至 simplexml。 我知道我必须使用 $doc->getElementsByTagName,但不知道在哪里?



<?php    
function rss_to_array($tags, $array, $url) {

  $doc = new DOMdocument();
  @$doc->load($url);
  $rss_array = array();
  foreach($tags as $tag) {
    if ($doc->getElementsByTagName($tag)) {
      foreach($doc->getElementsByTagName($tag) AS $node) {
        $items = array();
        foreach($array AS $key => $values) {
          $items[$key] = array();
          foreach($values as $value) {
            if ($itemsCheck = $node->getElementsByTagName($value)) {
              for( $j=0 ;  $j < $itemsCheck->length; $j++ ) {
                if (($attribute = $itemsCheck->item($j)->nodeValue) != "") {
                  $items[$key][] = $attribute;
                } else if ($attribute = $itemsCheck->item($j)->getAttribute('term')) {
                  $items[$key][] = $attribute;
                } else if ($itemsCheck->item($j)->getAttribute('rel') == 'alternate') {
                  $items[$key][] = $itemsCheck->item($j)->getAttribute('href');
                }
              }
            }
          }
        }
        array_push($rss_array, $items);
      }
    }
  }
  return $rss_array;
}

$rss_item_tags = array('item', 'entry');
$rss_tags = array(
  'title' => array('title'),
  'description' => array('description', 'content', 'summary'),
  'link' => array('link', 'feedburner'),
  'category' => array('category')
);

$rssfeed = rss_to_array($rss_item_tags, $rss_tags, $url);

echo '<pre>';
print_r($rssfeed);
echo '</pre>';
exit;
?>

【问题讨论】:

  • 你能用你的确切 xml 更新吗……那会很有帮助

标签: php xml rss domdocument atom-feed


【解决方案1】:

对于 RSS 提要,尝试使用 simplexml_load_file。它从 XML 中创建一个对象,并且由于所有 RSS 提要都是相同的,因此您可以执行以下操作:

$feed = simplexml_load_file(your_rss_url_here);

for($i=0; $i < 10; $i++){
// this is assuming there are 10 pieces of content for each RSS you're loading

    $link = $feed->channel->item[$i]->link;
    // do each for pubdate, author, description, title, etc.
}

http://php.net/manual/en/book.simplexml.php

【讨论】:

    猜你喜欢
    • 2012-04-15
    • 2020-07-24
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2013-09-25
    • 2013-02-08
    • 1970-01-01
    相关资源
    最近更新 更多