2016-02-16 25 views
10

Mã dưới đây để xuất dữ liệu từ bảng mysql dưới dạng tệp xml. Tôi đã thử một số mã nhưng không nhận được kết quả. Vui lòng kiểm tra và giúp tôi.Làm cách nào để xuất dữ liệu mysql vào xml bằng cách sử dụng php

Hiện nay nhận được kết quả là

8sarathsarathernakulam423432washington9rahulrahulernakulam21212121newyork10aaaa3london11bbbb1newyork12cccc2washington13dddd3london 

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

trình duyệt cho thấy

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

Tôi có ấn tượng rằng những gì bạn nói là kết quả bạn nhận được thực sự chỉ là những gì được hiển thị trong trình duyệt của bạn. Xin lưu ý rằng trình duyệt không có khả năng hiển thị xml khi bạn tạo trình duyệt theo bất kỳ cách nào có ý nghĩa. Cân nhắc xem xét nguồn của tài liệu mà trình duyệt của bạn hiển thị hoặc kết xuất đầu ra của bạn vào một tệp và xem xét điều đó. – arkascha

+0

@arkascha, Cảm ơn, tôi đã cập nhật kết quả trình duyệt của mình với câu hỏi của mình. Tôi đã kiểm tra điều đó nhưng tôi không tìm thấy vấn đề. Tôi không biết tại sao kết quả không đúng. –

+0

OK, trông đẹp hơn nhiều! Bây giờ nếu bạn cũng cho chúng tôi biết chính xác những gì là sai với kết quả bạn nhận được chúng tôi thực sự sẽ có thể giúp với câu hỏi của bạn ... – arkascha

Trả lời

5

Khi chúng tôi đang xử lý XML và HTML, cách tốt nhất để hành động là từng là thông qua trình phân tích cú pháp. Trong tình huống cụ thể này, hoạt động với một trình phân tích cú pháp đảm bảo một XML hợp lệ và một mã ngắn gọn.

Sau khi xác định mySQL truy vấn, chúng tôi init mới DOMDocument với phiên bản và mã hóa, sau đó chúng tôi đặt ->formatOutput mình là True để in ra XML trong định dạng thụt vào:

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

Sau đó, chúng tôi tạo ra các nút gốc và chúng tôi thêm nó vào DOMDocument:

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

Tại thời điểm này, sau khi thực hiện mySQL truy vấn, chúng tôi thực hiện một vòng lặp while qua mỗi hàng kết quả; cho mỗi hàng, chúng ta tạo ra một nút rỗng <address>, sau đó chúng tôi thực hiện một vòng lặp foreach thông qua trường của mỗi hàng. Đối với mỗi trường, chúng ta tạo một childnode trống với thẻ là khóa trường, sau đó chúng ta nối thêm childnode giá trị trường là CDATA và cùng một childnode tới nút <address>; ở phần cuối của mỗi while vòng lặp, mỗi nút <address> được nối vào nút gốc:

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

Bây giờ, XML của bạn đã sẵn sàng.

Nếu bạn muốn tiết kiệm nó vào một tập tin, bạn có thể làm điều đó bằng cách:

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

Ngược lại, nếu bạn thích gửi nó như XML bạn phải sử dụng mã này:

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

Nếu bạn muốn thay thế , hãy xuất nó trong trang HTML, bạn có thể viết mã này:

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

+1

Một nơi nào đó [bobince đang mỉm cười trong khi cưỡi ngựa] (http://stackoverflow.com/a/1732454/2370483) – Machavity

+0

@ fusion3k Cảm ơn bạn rất nhiều –

0

R eplace

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

với

$xml .= $value; 
+0

được tạo đầy đủ của bạn Bạn sẽ phải giải thích chi tiết về điều này để tránh bị downvotes. OP cho biết anh ta đang sử dụng 'CDATA' để tránh phá vỡ tính tương thích của XML – Machavity

0

NẾU bạn muốn có nó định dạng nó là "độc đáo" trong trình duyệt thêm:

echo "<pre>"; 

trước:

echo $xml; 

Xin lưu ý điều này S BREAK BREAK tệp XML, nhưng nó sẽ có vẻ tốt trong b rowser .... nếu đó là những gì bạn đang theo sau ...

0

tôi sẽ đề nghị để sử dụng thư viện như SimpleXMLElement vv để tạo các tài liệu 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

Chuyển đến cơ sở dữ liệu phpmyadmin của bạn và chọn xml ở định dạng tệp.

Các vấn đề liên quan