Php 将while循环生成的xml赋值给变量
我正在使用while循环创建XML,但是现在我需要使用XML头信息和包装器标记预先结束并附加生成的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 = "<
$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 <blink>"Frigging"</blink> 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 <blink>"Frigging"</blink> 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>