首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取xml时出错

读取xml时出错
EN

Stack Overflow用户
提问于 2016-12-13 07:25:37
回答 2查看 41关注 0票数 0

我有一些酒店细节的xml表格,但是当我试图读取所有数据时,它并没有显示所有数据,只是重复了第一个酒店名称或酒店数据。下面有到xml代码的链接。

myxmlfile文件

我试过这段代码来检索数据,

代码语言:javascript
复制
            $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饭店Salmiya酒店类别:三星级酒店目的地:科威特房间名称: Ibis饭店Salmiya 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称: Jumeirah Messilah海滩酒店及水疗中心 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:摄政酒店 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:时代广场套房 酒店名称: Ibis饭店Salmiya饭店类别:三星级酒店目的地:科威特房间名称: Ibis Sharq 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特房间名称:科威特莫文皮克 酒店名称: Ibis饭店Salmiya饭店类别:三星级酒店目的地:科威特房间名称: JW万豪科威特 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特房间名称: Radisson Blu酒店科威特 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特房间名称: Safir住宅 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:科威特卡尔顿大厦酒店 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:万豪酒店庭院 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:科威特绿洲酒店 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:棕榈滩酒店及水疗中心 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称: Marina饭店 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称: Al Manshar Rotana酒店 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:科威特交响乐风格酒店 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:科威特千年酒店及会议中心 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称: Le Royal科威特 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:科威特皇家塔 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称: Ramada科威特酒店 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:科威特皇冠广场 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称: Al Jahra Copthone酒店及度假村 酒店名称: Salmiya酒店类别:三星级酒店目的地:科威特客房名称:贝斯特韦斯特普拉斯马布拉酒店 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:新公园酒店 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:弗洛拉公园公寓 酒店名称: Ibis饭店Salmiya酒店类别:三星级酒店目的地:科威特客房名称:科威特假日酒店

如何获取酒店详细信息

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-13 07:55:07

尝试一下,我做了几处改变:

代码语言:javascript
复制
$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'];

}
 }

代码语言:javascript
复制
$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/>";



}   

 }
票数 -1
EN

Stack Overflow用户

发布于 2016-12-13 10:25:02

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41115627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档