2016-02-16 11 views
10

Poniższy kod służy do eksportu danych z tabeli mysql jako pliku xml. Próbowałem kilka kodu, ale nie otrzymałem wyniku. Sprawdź i pomóż mi.W jaki sposób można eksportować dane mysql do xml przy pomocy php

Obecnie coraz wynik jest

8sarathsarathernakulam423432washington9rahulrahulernakulam21212121newyork10aaaa3london11bbbb1newyork12cccc2washington13dddd3london 

Kod

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

Przeglądarka pokazuje

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

Mam wrażenie, że to, co mówisz, jest wynikiem, jaki otrzymujesz, to właśnie to, co wizualizuje się w przeglądarce. Zwróć uwagę, że przeglądarka nie jest w stanie wizualizować xml podczas tworzenia go w jakikolwiek znaczący sposób. Rozważ przyjrzenie się źródłu dokumentu wyświetlanego w przeglądarce lub zrzuć dane wyjściowe do pliku i spójrz na nie. – arkascha

+0

@arkascha, Dzięki, zaktualizowałem mój wynik przeglądarki o moje pytanie. Sprawdziłem, ale nie znalazłem problemu. Nie wiem, dlaczego wynik nie jest poprawny. –

+0

OK, to wygląda o wiele lepiej! Teraz, jeśli powiesz nam, co dokładnie jest nie tak z uzyskanym wynikiem, będziemy w stanie pomóc ci w zadaniu pytania ... – arkascha

Odpowiedz

5

Kiedy mamy do czynienia z XML i HTML, najlepszym sposobem działania jest kiedykolwiek przez parser. W tej konkretnej sytuacji działanie z analizatorem składni gwarantuje poprawny XML i czysty, krótki kod.

Po zdefiniowaniu mySQL zapytanie, my init, nowy DOMDocument wersji i kodowania, potem odstawił ->formatOutput True wydrukować XML w formacie wcięte:

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

Następnie tworzymy węzeł główny, a my dołączania do DOMDocument:

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

w tym momencie, po wykonaniu mySQL zapytanie, wykonujemy while pętli każdego otrzymanego rzędu; dla każdego rzędu tworzymy pusty węzeł <address>, następnie wykonujemy pętlę foreach przez pole każdego wiersza. Dla każdego pola tworzymy pusty childnode ze znacznikiem jako kluczem pola, a następnie dołączamy do childnode wartość pola jako CDATA i ten sam węzeł childnode do <address>; Na koniec każdej pętli while, każdy węzeł <address> jest dołączany do węzła głównego:

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

Teraz Twój XML jest gotowy.

Jeśli chcesz zapisać go do pliku, można to zrobić przez:

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

W przeciwnym razie, jeśli wolisz wysłać go jako XML trzeba użyć tego kodu:

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

Jeśli chcesz zamiast tego wypisz go na stronie HTML, możesz napisać ten kod:

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

+1

Gdzieś [bobince uśmiecha się podczas jazdy na kucyku] (http://stackoverflow.com/a/1732454/2370483) – Machavity

+0

@ fusion3k Dziękuję bardzo –

0

R EUmieãæ

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

z

$xml .= $value; 
+0

Będziesz musiał opracować na ten temat, aby uniknąć downvotes. OP powiedział, że używał 'CDATA', aby uniknąć łamania kompatybilności XML – Machavity

0

jeśli chcesz mieć go sformatować "ładnie" w przeglądarce dodaj:

echo "<pre>"; 

przed:

echo $xml; 

Zauważ, że to ZMNIEJSZY plik XML, ale będzie dobrze wyglądać w b Rowser .... jeśli to jest to, czego szukasz ...

0

Proponuję używać bibliotek jak SimpleXMLElement itp do tworzenia dokumentów XML.

$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

Przejdź do eksportu bazy danych phpmyadmin i wybierz xml w formacie pliku.

Powiązane problemy