2015-06-25 163 views
1

我從mysql數據庫獲取數據到一個XML文件。我正在使用下面的PHP代碼來獲取輸出。PHP從mysql數據庫輸出數據到一個XML文件

PHP代碼:

<?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(); 
?> 

使用上面的代碼我得到下面的輸出XML輸出。

本次輸出:

<?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> 

我想組engID並獲得以下輸出

所需的輸出:

<?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> 

有人能指導我一下,如何分組它一起。 謝謝。

回答

0

一個非如此糟糕想法應該是

  1. 處理你的數據,並將其保存
  2. 生成你的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 
        } 
    } 
    
相關問題