php

2016-02-16 9 views
10

का उपयोग कर xml में mysql डेटा को निर्यात कैसे कर सकता है नीचे कोड xsl फ़ाइल के रूप में mysql तालिका से निर्यात डेटा के लिए है। मैंने कई कोडों की कोशिश की है लेकिन नतीजा नहीं मिला है। कृपया जांचें और मेरी मदद करें।php

वर्तमान में हो रही परिणाम है

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

ब्राउज़र से पता चलता

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

मुझे लगता है कि आप जो कहते हैं वह वह परिणाम है जो आपको वास्तव में मिलता है जो आपके ब्राउज़र में विज़ुअलाइज़ किया जाता है। कृपया ध्यान दें कि एक ब्राउज़र xml को देखने में सक्षम नहीं है क्योंकि आप इसे किसी भी सार्थक तरीके से बनाते हैं। अपने ब्राउज़र को दिखाए गए दस्तावेज़ के स्रोत पर नज़र डालने पर विचार करें या अपने आउटपुट को फ़ाइल में डंप करें और उस पर देखें। – arkascha

+0

@arkascha, धन्यवाद, मैंने अपने प्रश्न के साथ अपने ब्राउज़र परिणाम को अपडेट किया है। मैंने जांच की लेकिन मुझे समस्या नहीं मिली। मुझे नहीं पता कि परिणाम ठीक से क्यों नहीं हो रहा है। –

+0

ठीक है, यह बहुत बेहतर दिखता है! अब यदि आप हमें यह भी बताते हैं कि परिणाम के साथ वास्तव में क्या गलत है, तो हम वास्तव में आपके प्रश्न के साथ मदद करने में सक्षम होंगे ... – arkascha

उत्तर

5

जब हम एक्सएमएल और एचटीएमएल से काम कर रहे हैं, तो कार्य करने का सबसे अच्छा तरीका है एक पार्सर के माध्यम से। इस विशेष स्थिति में, एक पार्सर के साथ परिचालन एक वैध एक्सएमएल और एक साफ, लघु कोड की गारंटी देता है।

MySQL क्वेरी परिभाषित करने के बाद, हम एक नए DOMDocument संस्करण और एन्कोडिंग के साथ init, तो हम यह सच करने के लिए अपने ->formatOutput सेट दांतेदार प्रारूप में XML बाहर मुद्रित करने के लिए:

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

फिर, हम रूट नोड बना सकते हैं और हम DOMDocument से संलग्न:

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

इस बिंदु पर, mySQL क्वेरी को क्रियान्वित करने के बाद, हम एक while पाश प्रत्येक परिणामस्वरूप पंक्ति के माध्यम से करते हैं; प्रत्येक पंक्ति के लिए, हम एक खाली नोड <address> बनाते हैं, फिर हम प्रत्येक पंक्ति के क्षेत्र के माध्यम से foreach पाश प्रदर्शन करते हैं। प्रत्येक फ़ील्ड के लिए, हम फ़ील्ड कुंजी के रूप में टैग के साथ एक खाली बालनोड बनाते हैं, फिर हम फ़ील्ड मान को सीडीएटीए और उसी बालकोड के रूप में <address> नोड के रूप में बर्नोड करने के लिए जोड़ते हैं; प्रत्येक while पाश के अंत में, प्रत्येक <address> नोड रूट नोड में जोड़ा जाता है:

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

अब, अपने एक्सएमएल तैयार है।

आप एक फाइल करने के लिए यह बचाने चाहते हैं, आप इसे से कर सकते हैं:

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

अन्यथा यदि आप पसंद करते एक्सएमएल के रूप में भेजें आप इस कोड का उपयोग करने के लिए है,:

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

:

आप HTML पृष्ठ में उत्पादन यह बजाय चाहते हैं, तो आप इस कोड लिख सकते हैं

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

  • DOMDocument के बारे में अधिक
+1

तोड़ने से बचने के लिए 'सीडीएटीए' का उपयोग कर रहा था कहीं और [एक टट्टू की सवारी करते समय बॉबन्स इस पर मुस्कुरा रहा है] (http://stackoverflow.com/a/1732454/2370483) – Machavity

+0

@ fusion3k आपको बहुत बहुत धन्यवाद –

0

आर पहले

echo "<pre>"; 

: eplace

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

$xml .= $value; 
+0

को देखेंगे, आपको डाउनवॉट से बचने के लिए इस पर विस्तार करना होगा। ओपी ने कहा कि वह एक्सएमएल संगतता – Machavity

0

आप इसे स्वरूपित करना चाहते हैं के साथ "अच्छी तरह से" ब्राउज़र में एक जोड़ने

echo $xml; 

कृपया ध्यान दें कि यह एक्सएमएल फाइल होगा, लेकिन यह बी में अच्छा लगेगा rowser .... अगर वह है जो आप के बाद हैं ...

0

मैं एक्सएमएल दस्तावेज़ बनाने के लिए SimpleXMLElement आदि जैसे पुस्तकालयों का उपयोग करने के लिए सुझाव है कि देखें।

$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

अपने phpmyadmin डेटाबेस निर्यात पर जाएं और फ़ाइल प्रारूप में xml का चयन करें।

संबंधित मुद्दे

 संबंधित मुद्दे