php - SimpleXML 问题,将项目列表包装在一个 <tag> 中

标签 php mysql simplexml

问题:我想从数据库中获取所有位置并将它们全部包含在 <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/

相关文章:

php - 学习 Symfony2 还是改用 Zend?

mysql - SQL/MySQL 递归地从同一个表中提取

mysql - 如何从表的行中获取变量到列表中? (示例)(数据透视表?)

mysql - 使用 Haxe 将 SDateTime 存储在 SQL 数据库中

php - SimpleXML 访问带命名空间的节点和不带命名空间的子节点

php - 在 PHP 中提取 XML 文本时保留 <br>

php - 在php中将十进制值转换为unicode字符

php - Urlencode 除了斜杠之外的所有内容?

php - 在 PRESTASHOP 的多商店 URL 上找不到所有 CSS 和 JS 文件

php - 如何解析<media :content> tag in RSS with simplexml