Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将while循环生成的xml赋值给变量_Php_Mysql_Xml - Fatal编程技术网

Php 将while循环生成的xml赋值给变量

Php 将while循环生成的xml赋值给变量,php,mysql,xml,Php,Mysql,Xml,我正在使用while循环创建XML,但是现在我需要使用XML头信息和包装器标记预先结束并附加生成的XML,但是我正在努力让它工作,下面是我的代码 $result = mysql_query("SELECT * FROM users") or die(mysql_error()); $row = mysql_fetch_array($result); while ($row = mysql_fetch_array($result)) { $pumaXML = "<

我正在使用while循环创建XML,但是现在我需要使用XML头信息和包装器标记预先结束并附加生成的XML,但是我正在努力让它工作,下面是我的代码

$result = mysql_query("SELECT * FROM users")
or die(mysql_error());

$row = mysql_fetch_array($result);

    while ($row = mysql_fetch_array($result)) {
        $pumaXML  = "<userDetails>";
        $pumaXML .= "<userID>".$row['uid']."</userID>";
        $pumaXML .= "<userName>".$row['userName']."</userName>";
        $pumaXML .= "<points>".$row['points']."</points>";
        $pumaXML .= "<imageURL>".$row['imageURL']."</imageURL>";
        $pumaXML .= "<thumbURL>".$row['thumbURL']."</thumbURL>";
        $pumaXML .= "</userDetails>";
    };
$result=mysql\u查询(“从用户中选择*)
或者死(mysql_error());
$row=mysql\u fetch\u数组($result);
while($row=mysql\u fetch\u数组($result)){
$pumaXML=“”;
$pumaXML.=''.$row['uid'.'';
$pumaXML.=''.$row['userName'.'';
$pumaXML.=''.$row['points'].'';
$pumaXML.=''.$row['imageURL']。'';
$pumaXML.=''.$row['thumbURL']。'';
$pumaXML.=”;
};
我似乎找不到一个方法来做这个,我也试着做了一个函数,但是做得不太好,这是代码

function createXML($result) {
    while ($row = mysql_fetch_array($result)) {
        $pumaXML  = "<userDetails>";
        $pumaXML .= "<userID>".$row['uid']."</userID>";
        $pumaXML .= "<userName>".$row['userName']."</userName>";
        $pumaXML .= "<points>".$row['points']."</points>";
        $pumaXML .= "<imageURL>".$row['imageURL']."</imageURL>";
        $pumaXML .= "<thumbURL>".$row['thumbURL']."</thumbURL>";
        $pumaXML .= "</userDetails>";
    };
    return $pumaXML;
};
函数createXML($result){
while($row=mysql\u fetch\u数组($result)){
$pumaXML=“”;
$pumaXML.=''.$row['uid'.'';
$pumaXML.=''.$row['userName'.'';
$pumaXML.=''.$row['points'].'';
$pumaXML.=''.$row['imageURL']。'';
$pumaXML.=''.$row['thumbURL']。'';
$pumaXML.=”;
};
返回$pumaXML;
};
先走一步

以下是如何使用:

函数createUserDetailsXml(数组$result){
$dom=新的DOMDocument;
$dom->formatOutput=TRUE;//启用自动缩进
$dom->loadXML(“”);//设置根节点
foreach($结果为$行){
//创建用户详细信息节点
$user=$dom->createElement('user-details');
//创建详细信息并将其附加到“用户详细信息”节点
$user->appendChild(
$dom->createElement('user-id',$row['uid']);
$user->appendChild(
$dom->createElement('user-name',$row['userName']);
$user->appendChild(
$dom->createElement('user-points',$row['points']);
$user->appendChild(
$dom->createElement('image-url',$row['imageURL']);
$user->appendChild(
$dom->createElement('thumb-url',$row['thumbURL']);
//将“用户详细信息”节点添加到XML文档,例如“用户”节点
$dom->documentElement->appendChild($user);
};
return$dom->saveXML();//返回格式化的XML
};
请注意,函数希望您传入完整的结果数组,因此我可以使用以下方法对其进行测试:

$result = array(
    array(
        'uid'      => 1,
        'userName' => 'Gordon',
        'points'   => PHP_INT_MAX,
        'imageURL' => 'http://example.com/gordon.jpg',
        'thumbURL' => 'http://example.com/t_gordon.jpg'
    ),
    array(
        'uid'      => 2,
        'userName' => 'John <blink>"Frigging"</blink> Doe',
        'points'   => 0,
        'imageURL' => 'http://example.com/johndoe.jpg',
        'thumbURL' => 'http://example.com/t_johndoe.jpg'
    )
);
echo createUserDetailsXml($result);
$result=array(
排列(
'uid'=>1,
“用户名”=>“戈登”,
'points'=>PHP\u INT\u MAX,
'imageURL'=>'http://example.com/gordon.jpg',
'拇指URL'=>'http://example.com/t_gordon.jpg'
),
排列(
'uid'=>2,
“用户名”=>“约翰”该死的“多伊”,
“点数”=>0,
'imageURL'=>'http://example.com/johndoe.jpg',
'拇指URL'=>'http://example.com/t_johndoe.jpg'
)
);
echo createUserDetailsXml($result);
然后该函数将返回

<?xml version="1.0"?>
<users>
  <user-details>
    <user-id>1</user-id>
    <user-name>Gordon</user-name>
    <user-points>2147483647</user-points>
    <image-url>http://example.com/gordon.jpg</image-url>
    <thumb-url>http://example.com/t_gordon.jpg</thumb-url>
  </user-details>
  <user-details>
    <user-id>2</user-id>
    <user-name>John &lt;blink&gt;"Frigging"&lt;/blink&gt; Doe</user-name>
    <user-points>0</user-points>
    <image-url>http://example.com/johndoe.jpg</image-url>
    <thumb-url>http://example.com/t_johndoe.jpg</thumb-url>
  </user-details>
</users>

1.
戈登
2147483647
http://example.com/gordon.jpg
http://example.com/t_gordon.jpg
2.
约翰眨眼“该死的”/“眨眼母鹿”
0
http://example.com/johndoe.jpg
http://example.com/t_johndoe.jpg

请注意,DOM自动为您转义了John Doe名字中的特殊字符。DOM还将确保XML元素名称(或属性,如果您使用它们)在语法上是有效的。它还添加了XML序言。

您为什么要通过字符串连接来生成XML,而不是使用DOM来正确生成XML?嗯,这似乎是最简单的方法,我不知道如何使用DOM来生成XML。@Drgorosos谢谢。最优雅的方法是让数据库直接返回XML,但我认为MySql还不能做到这一点。在某种程度上,我自己也使用过这种方法,但查询很快就会变得不可读;)当然,就DOM或其他方面而言,它不是“真正的”XML,而是一种在topicThanx上花时间提供帮助的好方法和有趣的方法!我不确定是否得到了正确的输出,我正在将$row传递给函数,$row=mysql\u fetch\u array($result);我假设这是不正确的,但我不确定如何让mySQL以这样的方式导出用户信息,使每个用户信息都在一个数组中,在主数组中,还是我误解了?@kielei只需将
foreach
循环与您的
while
循环交换,并从函数中删除
数组
类型提示,这样您就可以从问题示例中传入
$result
<?xml version="1.0"?>
<users>
  <user-details>
    <user-id>1</user-id>
    <user-name>Gordon</user-name>
    <user-points>2147483647</user-points>
    <image-url>http://example.com/gordon.jpg</image-url>
    <thumb-url>http://example.com/t_gordon.jpg</thumb-url>
  </user-details>
  <user-details>
    <user-id>2</user-id>
    <user-name>John &lt;blink&gt;"Frigging"&lt;/blink&gt; Doe</user-name>
    <user-points>0</user-points>
    <image-url>http://example.com/johndoe.jpg</image-url>
    <thumb-url>http://example.com/t_johndoe.jpg</thumb-url>
  </user-details>
</users>