1

次の rss 形式を使用していますが、'content:encoded' 値を取り出すことができません。

<item>
    <title>some title</title>
    <link>some link</link>
    <pubDate>Sat, 07 Apr 2012 5:07:00 -0700</pubDate>
    <content:encoded><![CDATA[this value]]></content:encoded>
</item>

私はこの関数を書きましたが、「content:encoded」フィールドを除いてすべてうまく機能し、このエラーが表示されます:「Notice: Trying to get property of non-object」

function rssReader($url) {
  $doc = new DOMDocument();
  $doc->load($url);
  $fields = array('title', 'description', 'link', 'pubDate', 'content:encoded');
  $nodes = array();

  foreach ($doc->getElementsByTagName('item') as $node) {
    $item = array();
    var_export($node, true);
    foreach ($fields as $field)
      $item[$field] = $node->getElementsByTagName($field)->item(0)->nodeValue;
    $nodes[] = $item;
  }

  return $nodes;
}
4

2 に答える 2

2

タグの代わりにgetElementsByTagNameNS使用する必要があります。getElementsByTagName'content:encoded'

foreach ($fields as $field){
  if( $field == 'content:encoded' ){
      $item[$field] = $node->getElementsByTagNameNS('contentNamespaceURI','encoded')->item(0)->nodeValue;
  }else{
      $item[$field] = $node->getElementsByTagName($field)->item(0)->nodeValue;
  }
}

'contentNamespaceURI'で見つけることができますrss。次のようなものが必要です。

   xmlns:content="contentNamespaceURI"
于 2012-04-07T16:12:57.617 に答える
1

ここでのタグ名は「エンコード」されています。

使うだけ

$content => $node->getElementsByTagName('encoded')->item(0)->nodeValue
于 2013-08-29T05:25:58.020 に答える