PHP将数据从mysql数据库输出到XML文件

时间:2020-12-28 09:48:55

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

一个非常糟糕的主意应该是

  1. process your data and save it
  2. 处理您的数据并保存

  3. 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

一个非常糟糕的主意应该是

  1. process your data and save it
  2. 处理您的数据并保存

  3. 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
         }
    }