【问题标题】:How to get elements with custom name from rss?如何从 rss 获取具有自定义名称的元素?
【发布时间】:2012-04-07 13:46:13
【问题描述】:

我有以下 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;
}

【问题讨论】:

  • 告诉我们你是如何尝试的......
  • 我认为你必须阅读更多关于命名空间的内容
  • 你所说的命名空间是什么意思?你能指导我吗?

标签: php xml rss


【解决方案1】:

'content:encoded' 标签需要使用getElementsByTagNameNS 而不是getElementsByTagName

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

您可以在rss 中找到'contentNamespaceURI'。一定是这样的:

   xmlns:content="contentNamespaceURI"

【讨论】:

    【解决方案2】:

    这里的标签名称是“编码的”。

    随便用

    $content => $node->getElementsByTagName('encoded')->item(0)->nodeValue
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      • 1970-01-01
      相关资源
      最近更新 更多