I am getting data from mysql database to an XML file. I am using the following PHP code to get the output.
我从mysql数据库获取数据到XML文件。我使用以下PHP代码来获取输出。
PHP CODE:
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('emptestdb');
$sql = "SELECT name, username, DATE(visitdate) AS vdate, DATE(retdate) AS rdate, location FROM users";
$res = mysql_query($sql);
header("Content-Type: text/html/force-download");
header("Content-Disposition: attachment; filename='EMP_RECORDS.xml'");
$xml = new XMLWriter();
$xml->openURI("php://output");
$xml->startDocument('1.0','UTF-8');
$xml->setIndent(true);
$xml->startElement('engineers');
while ($row = mysql_fetch_assoc($res)) {
$xml->startElement("engineer");
$xml->writeAttribute('engID', $row['username']);
$xml->writeAttribute('engName', $row['name']);
$xml->startElement("location");
$xml->writeAttribute('fieldLoc', $row['location']);
$xml->writeElement('vistiDate',$row['vdate']);
$xml->writeElement('retDate',$row['rdate']);
$xml->endElement();
$xml->endElement();
}
$xml->endElement();
header('Content-type: text/xml');
$xml->flush();
?>
On using the above code i am getting the following output XML output.
使用上面的代码我得到以下输出XML输出。
Present Output:
<?xml version="1.0" encoding="UTF-8"?>
<engineers>
<engineer engID="1" engName="John">
<location fieldLoc="Geneva">
<vistiDate>2015-01-23</vistiDate>
<retDate>2015-06-28</retDate>
</location>
</engineer>
<engineer engID="1" engName="John">
<location fieldLoc="Paris">
<vistiDate>2015-02-12</vistiDate>
<retDate>2015-02-17</retDate>
</location>
</engineer>
<engineer engID="2" engName="Josh">
<location fieldLoc="Paris">
<vistiDate>2015-02-12</vistiDate>
<retDate>2015-02-17</retDate>
</location>
</engineer>
<engineer engID="3" engName="Rita">
<location fieldLoc="Paris">
<vistiDate>2015-02-12</vistiDate>
<retDate>2015-02-17</retDate>
</location>
</engineer>
</engineers>
I am trying to group the engID and get the following output
我正在尝试对engID进行分组并获得以下输出
Desired Output:
<?xml version="1.0" encoding="UTF-8"?>
<engineers>
<engineer engID="1" engName="John">
<location fieldLoc="Geneva">
<vistiDate>2015-01-23</vistiDate>
<retDate>2015-06-28</retDate>
</location>
<location fieldLoc="Paris">
<vistiDate>2015-02-12</vistiDate>
<retDate>2015-02-17</retDate>
</location>
</engineer>
<engineer engID="2" engName="Josh">
<location fieldLoc="Paris">
<vistiDate>2015-02-12</vistiDate>
<retDate>2015-02-17</retDate>
</location>
</engineer>
<engineer engID="3" engName="Rita">
<location fieldLoc="Paris">
<vistiDate>2015-02-12</vistiDate>
<retDate>2015-02-17</retDate>
</location>
</engineer>
</engineers>
Can someone guide me as to how to group it together. Thanks.
有人可以指导我如何将它组合在一起。谢谢。
1 个解决方案
#1
0
A non-so bad idea should be to
一个非常糟糕的主意应该是
- process your data and save it
-
generate your xml
生成你的xml
$engineers = []; // process data while ($row = mysql_fetch_assoc($res)) { if (!isset($engineers[$row['username']])) { $engineers[$row['username']] = [ 'name' => $row['name'], 'locations' => [], ]; } $engineers[$row['username']]['locations'][] = [ $xml->writeAttribute('fieldLoc', $row['location']); 'vistiDate' => $row['vdate'], 'retDate' => $row['rdate']); ]; } // generate xml foreach ($engineers as $engineer) { // add engineer info to xml foreach ($engineer['locations'] as $location) { // add location to xml } }
处理您的数据并保存
#1
0
A non-so bad idea should be to
一个非常糟糕的主意应该是
- process your data and save it
-
generate your xml
生成你的xml
$engineers = []; // process data while ($row = mysql_fetch_assoc($res)) { if (!isset($engineers[$row['username']])) { $engineers[$row['username']] = [ 'name' => $row['name'], 'locations' => [], ]; } $engineers[$row['username']]['locations'][] = [ $xml->writeAttribute('fieldLoc', $row['location']); 'vistiDate' => $row['vdate'], 'retDate' => $row['rdate']); ]; } // generate xml foreach ($engineers as $engineer) { // add engineer info to xml foreach ($engineer['locations'] as $location) { // add location to xml } }
处理您的数据并保存