问题:我想从数据库中获取所有位置并将它们全部包含在 <loc>
中标记,以下代码将每个位置放在 <loc>
中标签,导致几个 <loc>
当我只需要一个。我知道它这样做是因为它在一个循环内(simpleXML 部分),但不知道如何解决它。
if($r7){ //$r7 = If query was successfull..
while($row = mysqli_fetch_array($r7, MYSQLI_ASSOC)){
$convXML_from_loc = $convXML_from->addChild('loc',$row['location']);
}
}
如果我将它从循环中取出,它只会将数据库中的第一个位置放在那里 (iirc)。
替代方法是 echo "<xml>";
我认为这是不好的做法,因为没有父元素和子元素,所有元素都处于同一水平。
我将不胜感激有关此问题的任何指导,以及指向有关此主题的任何相关信息的链接。
问候。
编辑:如果不清楚,我需要将它们全部放在一个 loc 标签中,例如 <loc>Row 1, Row 2</loc>
.目前它正在提供 <loc>Row 1</loc><loc>Row 2</loc>
.
最佳答案
您有一个循环遍历每一行的 while 循环。您将在循环中做任何事情,次数与行数一样多。所以你将制作尽可能多的<loc>
元素有行,每行一个。
解决方案是在 while 循环中生成一个包含所有行数据的字符串,然后添加 <loc>
该字符串在循环外的元素。这导致 addChild()
只被调用一次,因此只创建一个 <loc>
元素。
$location_data;
if($r7){ //$r7 = If query was successfull..
while($row = mysqli_fetch_array($r7, MYSQLI_ASSOC)){
$location_data .= $row['location'] . ' ,';
}
}
$location_data = substr($location_data, 0, -2); // strip off the final space and comma
$convXML_from_loc = $convXML_from->addChild('loc',$location_data); // will result in '<loc>Row 1, Row 2</loc>'
关于php - SimpleXML 问题,将项目列表包装在一个 <tag> 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4318585/