阅读xml

时间:2016-12-13 07:25:38

标签: php xml foreach xmlreader

我有一些酒店详细信息的xml表,但是当我尝试读取所有数据时,它没有显示所有数据,只是重复了第一个酒店名称或酒店数据。下面有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
            }

,结果就像

  

酒店名称: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

如何获取酒店详细信息的所有数据

2 个答案:

答案 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/>";



}   

 }