2016-02-16 34 views
10

Il codice riportato di seguito è per i dati di esportazione dalla tabella mysql come file xml. Ho provato diversi codici ma non ho ottenuto il risultato. Per favore controlla e aiutami.Come esportare dati mysql in xml utilizzando php

Attualmente ottenendo risultato è

8sarathsarathernakulam423432washington9rahulrahulernakulam21212121newyork10aaaa3london11bbbb1newyork12cccc2washington13dddd3london 

Codice

<?php 
require_once "classes/dbconnection-class.php"; 
if(isset($_POST['export'])){ 
    header('Content-type: text/xml'); 
    $xml   = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; 
    $root_element = "addressbook"; //fruits 
    $xml   .= "<$root_element>"; 
    $query  = "SELECT AB.id, AB.name, AB.firstname, AB.street, AB.zipcode, AB.city_id, CI.city FROM address_book AS AB INNER JOIN city AS CI ON AB.city_id = CI.id"; 
    $result  = $mysqli->query($query); 
    if (!$result) { 
     die('Invalid query: ' . $mysqli->error()); 
    } 

    while($result_array = $result->fetch_assoc()){ 
     $xml .= "<address>"; 
     foreach($result_array as $key => $value) 
     { 
      //$key holds the table column name 
      $xml .= "<$key>"; 

      //embed the SQL data in a CDATA element to avoid XML entity issues 
      $xml .= "<![CDATA[$value]]>"; 

      //and close the element 
      $xml .= "</$key>"; 
     } 

     $xml.="</address>"; 
    } 
    $xml .= "</$root_element>"; 
    header ("Content-Type:text/xml"); 
    //header('Content-Disposition: attachment; filename="downloaded.xml"'); 
    echo $xml; 
} 
?> 

Browser mostra

<?xml version="1.0" encoding="UTF-8"?><addressbook><address><id><![CDATA[8]]></id><name><![CDATA[sarath]]></name><firstname><![CDATA[sarath]]></firstname><street><![CDATA[ernakulam]]></street><zipcode><![CDATA[42343]]></zipcode><city_id><![CDATA[2]]></city_id><city><![CDATA[washington]]></city></address><address><id><![CDATA[9]]></id><name><![CDATA[rahul]]></name><firstname><![CDATA[rahul]]></firstname><street><![CDATA[ernakulam]]></street><zipcode><![CDATA[2121212]]></zipcode><city_id><![CDATA[1]]></city_id><city><![CDATA[newyork]]></city></address><address><id><![CDATA[10]]></id><name><![CDATA[a]]></name><firstname><![CDATA[a]]></firstname><street><![CDATA[a]]></street><zipcode><![CDATA[a]]></zipcode><city_id><![CDATA[3]]></city_id><city><![CDATA[london]]></city></address><address><id><![CDATA[11]]></id><name><![CDATA[b]]></name><firstname><![CDATA[b]]></firstname><street><![CDATA[b]]></street><zipcode><![CDATA[b]]></zipcode><city_id><![CDATA[1]]></city_id><city><![CDATA[newyork]]></city></address><address><id><![CDATA[12]]></id><name><![CDATA[c]]></name><firstname><![CDATA[c]]></firstname><street><![CDATA[c]]></street><zipcode><![CDATA[c]]></zipcode><city_id><![CDATA[2]]></city_id><city><![CDATA[washington]]></city></address><address><id><![CDATA[13]]></id><name><![CDATA[d]]></name><firstname><![CDATA[d]]></firstname><street><![CDATA[d]]></street><zipcode><![CDATA[d]]></zipcode><city_id><![CDATA[3]]></city_id><city><![CDATA[london]]></city></address></addressbook> 
+0

Ho l'impressione che quello che dici è il risultato che ottieni in realtà è solo ciò che viene visualizzato nel tuo browser. Si noti che un browser non è in grado di visualizzare xml mentre lo si crea in modo significativo. Prendi in considerazione la fonte del documento che il tuo browser mostra o scarica l'output in un file e guarda quello. – arkascha

+0

@arkascha, Grazie, ho aggiornato il risultato del mio browser con la mia domanda. L'ho controllato ma non ho trovato alcun problema. Non so perché il risultato non sta andando bene. –

+0

OK, sembra molto meglio! Ora, se ci dite anche cosa è esattamente sbagliato nel risultato che otterremmo, saremmo in grado di aiutarvi con la vostra domanda ... – arkascha

risposta

5

Quando abbiamo a che fare con XML e HTML, il modo migliore per agire è sempre attraverso un parser. In questa situazione particolare, il funzionamento con un parser garantisce un codice XML valido e un codice breve pulito.

Dopo aver definito query MySQL, abbiamo init una nuova DOMDocument con la versione e la codifica, quindi abbiamo impostato la sua ->formatOutput True stampare XML in formato rientrato:

$query = "SELECT AB.id, AB.name, AB.firstname, AB.street, AB.zipcode, AB.city_id, CI.city FROM address_book AS AB INNER JOIN city AS CI ON AB.city_id = CI.id"; 

$dom = new DOMDocument('1.0', 'utf-8'); 
$dom ->formatOutput = True; 

Poi, creiamo il nodo principale e noi accodarla DOMDocument:

$root = $dom->createElement('addressbook'); 
$dom ->appendChild($root); 

a questo punto, dopo l'esecuzione di query mySQL, eseguiamo un ciclo while ogni riga risultante; per ogni riga, creiamo un nodo vuoto <address>, quindi eseguiamo un ciclo foreach attraverso il campo di ogni riga. Per ogni campo, creiamo un childcode vuoto con tag come chiave di campo, quindi aggiungiamo a childnode il valore del campo come CDATA e lo stesso childnode al nodo <address>; al termine di ogni ciclo while, ogni nodo <address> viene aggiunto al nodo radice:

$result  = $mysqli->query($query); 
while($row = $result->fetch_assoc()) 
{ 
    $node = $dom->createElement('address'); 
    foreach($row as $key => $val) 
    { 
     $child = $dom->createElement($key); 
     $child ->appendChild($dom->createCDATASection($val)); 
     $node ->appendChild($child); 
    } 
    $root->appendChild($node); 
} 

Ora, il vostro XML è pronto.

Se vuoi salvarlo in un file, si può fare da:

$dom->save('/Your/File/Path.xml'); 

In caso contrario, se si preferisce inviarlo come XML si deve usare questo codice:

header('Content-type: text/xml'); 
echo $dom->saveXML(); 
exit; 

Se si desidera invece uscita nella pagina HTML, è possibile scrivere questo codice:

echo '<pre>'; 
echo htmlentities($dom->saveXML()); 
echo '</pre>'; 

+1

Da qualche parte [Bobince sorride mentre cavalca un pony] (http://stackoverflow.com/a/1732454/2370483) – Machavity

+0

@ fusion3k Grazie mille –

0

R eplace

$xml .= "<![CDATA[$value]]>"; 

con

$xml .= $value; 
+0

Dovrai approfondire questo per evitare downvotes. L'OP ha detto che stava usando 'CDATA' per evitare di rompere la compatibilità XML – Machavity

0

se si vuole avere formattarlo "bene" nel browser aggiungere un:

echo "<pre>"; 

prima del:

echo $xml; 

Si prega di notare questo interromperà il file XML, ma sarà bello in b rowser .... se questo è quello che stai cercando ...

3

Passare all'esportazione del database phpmyadmin e selezionare xml in formato file.