从RSS文件中提取节点

问题描述 投票:0回答:2

我在过去一个小时内使用Google来尝试找到一个Soution,但是我什么都没看到,我正在做的是解析ebay的RSS feed,该RSS feed大部分都在起作用。

RSS:

http://rest.ebay.com/epn/v1/find/item.rss?keyword=Laptop%20&campaignid=5338607813%20&sortOrder=BestMatch%20&programid=15

我的职能:

function parseEbayRSSFeed($url) {
    try {
        $rss = simplexml_load_file($url);
        $res = [];
        foreach ($rss->channel->item as $item) {
            $res[] = [
                'ebayLink' => $item->link,
                'ebayTitle' => $item->title,
                'ebayDescription' => $item->description
            ];
        }
        return $res;
    } catch(Exception $e) {
        echo $e->getMessage();      
    }   
}

我的函数解析链接/标题/描述很好,但是我似乎无法解析如下字段:

<e:CurrentPrice>64.99</e:CurrentPrice>

我尝试添加:

$res[] = [
    'ebayLink' => $item->link,
    'ebayTitle' => $item->title,
    'ebayDescription' => $item->description,
    'ebayPrice' => $item->e:CurrentPrice
     ];

但是这会产生错误:

syntax error, unexpected ':'

因此:以某种方式导致了此问题,有关如何解决的任何提示都将是不错的选择。

php
2个回答
0
投票

CurrentPrice标签在XML namespace下,在eBay示例中e = http://www.ebay.com/marketplace/search/v1/services,因此您需要使用该名称空间浏览树,如下所示:

$url = 'http://rest.ebay.com/epn/v1/find/item.rss?keyword=Laptop%20&campaignid=5338607813%20&sortOrder=BestMatch%20&programid=15';
$rss = simplexml_load_file($url);
$res = [];
foreach ($rss->channel->item as $item) {
    $res[] = [
        'ebayLink' => $item->link,
        'ebayTitle' => $item->title,
        'ebayDescription' => $item->description,
        'ebayPrice' => $item->children('http://www.ebay.com/marketplace/search/v1/services')->CurrentPrice,
    ];
}

print_r($res);

您可以使用children函数看到名称空间的激活。


0
投票

[<e:something>是名称空间为item的子级,因此在访问之前必须首先获取具有该名称空间的子级。

$url = "http://rest.ebay.com/epn/v1/find/item.rss?keyword=Laptop%20&campaignid=5338607813%20&sortOrder=BestMatch%20&programid=15";
$rss = simplexml_load_file($url);
$res = [];
foreach ($rss->channel->item as $item) {
    $e = $item->children('e', TRUE);
    $res[] = [
        'ebayLink' => $item->link,
        'ebayTitle' => $item->title,
        'ebayDescription' => $item->description,
        'ebayPrice' => $e->CurrentPrice
    ];
}
var_dump($res);
© www.soinside.com 2019 - 2024. All rights reserved.