读取错误 xml

Error in reading xml

我有一些酒店详细信息的 xml sheet,但是当我尝试读取所有数据时,它没有显示所有数据,只是重复第一个酒店名称或酒店数据。下面有 link 到 xml 代码。

myxmlfile

并且我已经尝试使用此代码来检索数据,

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

结果就像

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Ibis Hotel Salmiya

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Jumeirah Messilah Beach Hotel & Spa

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: The Regency Hotel

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Times Square Suites

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Ibis Sharq

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Mövenpick Kuwait

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: JW Marriott Kuwait

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Radisson Blu Hotel Kuwait

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Safir Residence

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Carlton Tower Hotel Kuwait

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Courtyard By Marriott Kuwait

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Oasis Hotel Kuwait

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: The Palms Beach Hotel & Spa

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Marina Hotel

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Al Manshar Rotana Hotel

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Symphony Style Hotel Kuwait

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Millennium Hotel & Convention Centre Kuwait

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Le Royal Kuwait

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Le Royal Tower Kuwait

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Ramada Kuwait Hotel

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Crowne Plaza Kuwait

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Al Jahra Copthone Hotel & Resort

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Best Western Plus Mahboula

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: New Park Hotel

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: Flora Park Apartment

Hotel Name: Ibis Hotel Salmiya Hotel Category: 3 STARS Hotel Destination: Kuwait Room Name: HOLIDAY INN KUWAIT AL THURAYA CITY

如何获取酒店详情的所有数据

试试这个我做了一些改动:

$xml = "http://www.medhyaftravel.com/api/api3/myxmlfile.xml";
$xml = preg_replace(
                  '/^(<\?[xX][mM][lL]\s+[^\?\>]+encoding\s*=\s*([\'"]))utf-16/u',
                  'utf-8', 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/u',
                  'utf-8', 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/>";



}   

 }

您在循环外分配 $hotel 变量。当你迭代它时它不会改变。

$availabilityrs = simplexml_load_string($response3);
$hotels = $availabilityrs->hotels->hotel;
foreach ($hotels as $hotel) {
   echo "Hotel Name: ".$hotel['name']."\n"; 
   //...
}

SimpleXMLs 语法魔术允许您将其视为节点列表(对于 foreach())或单个元素(列表的第一个)。