PHP的新手,如果问题真的很愚蠢,就不要发疯。
我已经制作了这段代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
img {float: left; margin-right: 30px; margin-bottom: 10px;}
</style>
<script src="js/jquery-1.7.2.min.js"></script>
<script src="js/lightbox.js"></script>
<link href="css/lightbox.css" rel="stylesheet" />
<title>Untitled Document</title>
</head>
<body>
<?php
// specify url of xml file
$url = "http://travelplaza.ro/turcia/belek/Belek.xml" ;
// get xml file contents
$xml = simplexml_load_file($url);
// loop begins
foreach ($xml->hotel[0] as $hotel) {
echo $hotel["hotelname"];
echo " ";
echo $hotel["stars"];
echo "<p>";
echo $hotel->description . "</br>";
echo "</p>";
echo "<p>";
echo "</p>";
}
foreach ($xml->hotel[0]->images[0] as $i) {
echo '<a href="' . $i["url"] . '" rel="lightbox"><img src="' . $i["url"] . '" width="100" height="100">';
echo "</a>";
}
以上是xml本身..当然有很多酒店。 我想要的结果是从第一家酒店的饲料中获得标题,描述和图片,然后是第二家酒店,依此类推。 相反,我只得到图像。如果我删除了atributes [0],它会给出一个列表,其中包含名称,描述和图片的酒店。我的错误在哪里?我只想展示酒店,描述和图像。任何帮助都会被贬低。 谢谢。 编辑:如果我只想显示酒店[45]的描述和图像?
xml看起来像这样:
<hotels>
<hotel hotelcode="xxx">
<description>
bla bla
</description>
<images>
<image url="http"/>
</images>
</hotel>
以上重复,最后一个我有结束标记。 xml文件是这样的: http://travelplaza.ro/turcia/belek/Belek.xml
答案 0 :(得分:2)
由于您没有发布该xml文件的内容,我们只能猜测其内容......
很可能$xml->hotel
是一系列酒店。但是你在那里迭代了frist元素,而不是在酒店列表上。试试这个:
foreach($xml->hotel as $hotel)
对于图像:您很可能必须将第二个foreach循环放置在第一个循环内的内图像中,因为每个酒店最有可能保存对多个图像的引用。所以第二个循环应该是这样的:
foreach($hotel->images as $i)
所以最终的代码可能是这样的:
$url = "http://travelplaza.ro/turcia/belek/Belek.xml";
// get xml file contents
$xml = simplexml_load_file($url);
// loop over the hotels
foreach($xml->hotel as $hotel){
echo $hotel["hotelname"]." ".$hotel["stars"]."\n";
echo "<p>\n".$hotel->description."\n</p>\n";
// loop this hotels images
echo "<p>\n";
foreach($hotel->images as $image) {
echo '<a href="'.$image["url"].'" rel="lightbox">'."\n";
echo '<img src="'.$image["url"].'" width="100" height="100">'."\n";
echo "</a>"\n;
}
echo"</p>\n";
}
但是如上所述:没有更多细节,我们只能猜测 ......
答案 1 :(得分:0)
hotel[0]
表示列表中的第一家酒店;当你循环遍历时,SimpleXML假设你想要它的孩子。在这种情况下,每家酒店都有两个孩子,一个description
和一个images
。
您依次想要每家酒店,即所有名为hotel
的元素,请删除[0]:
foreach($xml->hotel as $hotel)
对于图像,您希望在名称和描述的同时获取它们,但是您有两个单独的循环,因此在显示所有描述之前,您不会开始查看图像。
将图像循环移动到主循环内,并将其更改为查看您当前正在检查的酒店。同样,你不需要[0],但是看一下XML在一个image
元素中有多个images
元素,所以你需要这个:
foreach($hotel->images->image as $i)
(在这种情况下[0]也有效,因为$ hotel-&gt; images [0]是第一个也是唯一的images
元素,其子元素是个体image
我认为以上更好地表明了你的意图。)
答案 2 :(得分:0)
试试这个:
<?php
$url = "http://travelplaza.ro/turcia/belek/Belek.xml";
// get xml file contents
$xml = simplexml_load_file($url);
// loop begins
foreach($xml->hotel as $hotel) {
echo <<<EOD
<div>
<p>{$hotel['hotelname']}</p>
<p>{$hotel['stars']};</p>
<p>{$hotel->description}</p>
<p>
EOD;
foreach ($hotel->images[0] as $i) {
echo <<<EOD
<p>
<a href="{$i["url"]}" rel="lightbox"><img src="{$i["url"]}" width="100" height="100">'</a>
</p>
EOD;
}
echo <<<EOD
</div>
EOD;
}
?>