我在过去一个小时内使用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 ':'
因此:
以某种方式导致了此问题,有关如何解决的任何提示都将是不错的选择。
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函数看到名称空间的激活。
[<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);