我有一些酒店详细信息的xml表,但是当我尝试读取所有数据时,它没有显示所有数据,只是重复了第一个酒店名称或酒店数据。下面有xml代码的链接。
我尝试过这段代码来检索数据,
$availabilityrs = simplexml_load_string($response3);
$hotel = $availabilityrs->hotels->hotel;
$hotel1 = $availabilityrs->hotels->hotel;
$room_nodes = $hotel->rooms->room;
foreach ($hotel1 as $room) {
echo "Hotel Name: ".$hotel['name']."\n"; ?><br /><?php
echo "Hotel Category: ".$hotel['categoryName']."\n"; ?><br /><?php
echo "Hotel Destination: ".$hotel['destinationName']."\n"; ?><br /><?php
echo "Room Name: ".$room['name']."\n"; ?><br /><br /><?php
}
,结果就像
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Ibis Hotel Salmiya
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Jumeirah Messilah Beach Hotel&amp;水疗中心
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:丽晶酒店
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:时代广场套房
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Ibis Sharq
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:MövenpickKuwait
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:科威特JW万豪酒店
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:科威特丽笙酒店
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Safir Residence
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:科威特卡尔顿大厦酒店
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:科威特万怡酒店
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Oasis Hotel Kuwait
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:The Palms Beach Hotel&amp;水疗中心
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:滨海酒店
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Al Manshar Rotana Hotel
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Symphony Style Hotel Kuwait
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Millennium Hotel&amp;会议中心 科威特
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Le Royal Kuwait
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:科威特皇家塔楼
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Ramada Kuwait Hotel
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:科威特皇冠假日酒店
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Al Jahra Copthone Hotel&amp;度假村
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Best Western Plus Mahboula
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:新公园酒店
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:Flora Park Apartment
酒店名称:Ibis Hotel Salmiya Hotel类别:3 STARS Hotel 目的地:科威特房间名称:HURIDAY INN KUWAIT AL THURAYA CITY
如何获取酒店详细信息的所有数据
答案 0 :(得分:0)
您在循环外部分配$hotel
变量。迭代它时它不会改变。
$availabilityrs = simplexml_load_string($response3);
$hotels = $availabilityrs->hotels->hotel;
foreach ($hotels as $hotel) {
echo "Hotel Name: ".$hotel['name']."\n";
//...
}
SimpleXMLs syntax magic允许您将其视为节点列表(对于foreach()
)或作为单个元素(列表的第一个)。
答案 1 :(得分:-1)
试试这个我做了一些改动:
$xml = "http://www.medhyaftravel.com/api/api3/myxmlfile.xml";
$xml = preg_replace(
'/^(<\?[xX][mM][lL]\s+[^\?\>]+encoding\s*=\s*([\'"]))utf-16\2/u',
'\1utf-8\2', file_get_contents($xml));
$xmlcont = new SimpleXMLElement($xml);
foreach($xmlcont as $url) {
$hotel = $url->hotel;
foreach($hotel as $hot){
echo $hot['name']; echo "</br>"; echo $hot['categoryName'];echo "</br>";
$roomtest = $hot->rooms->room; echo $roomtest['name'];
}
}
或强>
$xml = "http://www.medhyaftravel.com/api/api3/myxmlfile.xml";
$xml = preg_replace(
'/^(<\?[xX][mM][lL]\s+[^\?\>]+encoding\s*=\s*([\'"]))utf-16\2/u',
'\1utf-8\2', file_get_contents($xml));
$availabilityrs = simplexml_load_string($xml);
foreach($availabilityrs as $url) {
$hotel = $url->hotel;
foreach($hotel as $hot){
$roomtest = $hot->rooms->room;
echo "Hotel Name: ".$hot['name']."<br/>";
echo "Hotel Category: ".$hot['categoryName']."<br/>";
echo "Hotel Destination: ".$hot['destinationName']."<br/>";
echo "Room Name: ".$roomtest['name']."<br/><br/><br/>";
}
}