2016-02-16 5 views
10

Unten Code ist für den Export von Daten aus MySQL Tabelle als XML-Datei. Ich habe mehrere Codes ausprobiert, aber nicht das Ergebnis. Bitte überprüfen Sie und helfen Sie mir.Wie kann ich mysql Daten in xml exportieren mit php

Derzeit bekommen Ergebnis ist

8sarathsarathernakulam423432washington9rahulrahulernakulam21212121newyork10aaaa3london11bbbb1newyork12cccc2washington13dddd3london 

-Code

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

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

Ich habe den Eindruck, dass Sie sagen, was das Ergebnis, das Sie tatsächlich bekommen, ist genau das, was in Ihrem Browser visualisiert. Bitte beachten Sie, dass ein Browser nicht in der Lage ist, XML zu visualisieren, wenn Sie es sinnvoll erstellen. Betrachten Sie die Quelle des Dokuments, das Ihr Browser zeigt, oder werfen Sie Ihre Ausgabe in eine Datei und schauen Sie sich das an. – arkascha

+0

@arkascha, Danke, ich habe mein Browserresultat mit meiner Frage aktualisiert. Ich habe das überprüft, aber ich habe das Problem nicht gefunden. Ich weiß nicht, warum das Ergebnis nicht richtig ankommt. –

+0

OK, das sieht viel besser aus! Nun, wenn Sie uns auch sagen, was genau falsch ist mit dem Ergebnis, das Sie bekommen wir die Lage wären, tatsächlich mit Ihrer Frage zu helfen ... – arkascha

Antwort

5

Wenn wir mit XML und HTML zu tun haben, ist der beste Weg zu handeln jemals durch einen Parser. In dieser speziellen Situation garantiert der Betrieb mit einem Parser eine gültige XML und einen sauberen, kurzen Code.

Nach der Definition mySQL Abfrage init wir eine neue DOMDocument mit Version und Codierung, dann setzen wir seine ->formatOutput auf True XML in gegliederten Format auszudrucken:

$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; 

Dann erstellen wir den Wurzelknoten und wir append es DOMDocument:

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

an diesem Punkt nach der Ausführung mySQL Abfrage, führen wir eine while Schleife durch jede resultierende Reihe; Für jede Zeile erstellen wir einen leeren Knoten <address>, dann führen wir eine foreach Schleife durch jedes Zeilenfeld. Für jedes Feld erstellen wir einen leeren childnode mit einem Tag als Feldschlüssel, dann fügen wir an childnode den Feldwert als CDATA und den gleichen childnode an den Knoten <address> an; am Ende jeder while Schleife, die jeweils <address> Knoten ist mit Wurzelknoten angehängt:

$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); 
} 

nun Ihre XML ist fertig.

Wenn Sie speichern sie in einer Datei möchten, können Sie es nach:

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

Andernfalls, wenn Sie senden Sie es vorziehen, als XML Sie diesen Code verwenden:

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

Wenn Sie stattdessen Ausgabe in HTML-Seite wollen, können Sie diesen Code schreiben:

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

+1

Irgendwo brechen zu vermeiden [bobince bei diesem während lächelnd auf ein Pony reiten] (http://stackoverflow.com/a/1732454/2370483) – Machavity

+0

@ fusion3k Vielen Dank –

0

R

echo "<pre>"; 

vor dem: eplace

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

mit

$xml .= $value; 
+0

Sie gehen auf diese haben zu erarbeiten downvotes zu vermeiden. Die OP sagte, dass er mit 'CDATA' XML-Kompatibilität – Machavity

0

wenn Sie es es "schön" im Browser ein-Format haben

echo $xml; 

Bitte beachten Sie, dies wird die XML-Datei brechen, aber es wird gut aussehen in der b rowser .... wenn das ist, was Sie wollen ...

0

Ich würde vorschlagen, Bibliotheken zu verwenden, wie SimpleXMLElement usw. XML-Dokumente zu erstellen.

$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><{$root_element}></{$root_element}>"); 
while($result_array = $result->fetch_assoc()){ 
    foreach($result_array as $key => $value) 
    { 
     $address = $xml->addChild("address"); 
     //embed the SQL data in a CDATA element to avoid XML entity issues 
     $addressFields = $address->addChild('"' . $key . '"', "<![CDATA[$value]]>"); 

     //No need to close the element 
    } 
} 
Header('Content-type: text/xml'); 
print($xml->asXML()); 
3

Gehen Sie zu Ihrem phpmyadmin Datenbankexport und wählen Sie XML im Dateiformat.