2012-04-07 60 views
1

我有以下rss格式,并且我无法弹出'content:encoded'值。如何从RSS获取具有自定义名称的元素?

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

我写了这个功能,一切正常,除了“内容:编码”字段,让我这个错误:“通知:试图让非对象的特性”

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

告诉我们如何你试过...... – 2012-04-07 13:50:15

+0

我认为你必须了解更多关于命名空间 – Michelle 2012-04-07 14:00:44

+0

您的命名空间是什么意思?你能指导我吗? – 2012-04-07 15:21:02

回答

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

你可以找到rss'contentNamespaceURI'。必须有这样的东西:

xmlns:content="contentNamespaceURI" 
1

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

只需使用

$content => $node->getElementsByTagName('encoded')->item(0)->nodeValue 
相关问题