如何在PHP

时间:2018-03-23 15:55:56

标签: php xml

我们需要更新客户正在使用的旧API。我们使用simplexml_load_file获取数据。新结构有点复杂,我找不到检索新数据的方法。

新结构如下所示:

enter image description here

在我们使用$ratingPrice = $xml->hotel->ratingPrice;获取值之前。

现在,我需要检索$xml->business->subcategoryRating->subcategoryRating->averageRating。我现在坚持了。

我如何获得wifi或位置的平均评分,并将它们以单个变量输出?

3 个答案:

答案 0 :(得分:1)

如果您的信息顺序始终相同(例如Wi-Fi,位置,公寓,清洁度),那么您可以

$xml->business->subcategoryRating->subcategoryRating[x]->averageRating

所以x是你的xml列表的索引。然后

...subcategoryRating[0]->averageRating

对应于Wi-Fi和

...subcategoryRating[1]->averageRating

对应于位置等等。

答案 1 :(得分:0)

您可以将各种评级提取到数组中,然后使用相关索引处理您之后的数据。这使用(例如)<category id="location">元素的id属性作为索引...

$ratings = [];
foreach ( $xml->business->subcategoryRatings->subcategoryRating as $rating )    {
    $ratings[(string)$rating->category['id']] = (string)$rating->averageRating;
}

echo $ratings["location"].PHP_EOL;

最后一行需要更新才能访问您之后的特定元素。

答案 2 :(得分:0)

作为替代方法,您可以创建xpath表达式并使用xpath

这将为您提供SimpleXMLElement个对象的数组。

$xml = simplexml_load_string($data);
$expression = '//business/subcategoryRatings/subcategoryRating[category[@id="wifi" or @id="location"]]';
foreach($xml->xpath($expression) as $item) {
    $averageRating = (string)$item->averageRating;    
}