PHP का उपयोग करके गतिशील रूप से XML फ़ाइल कैसे उत्पन्न करें?


233

मुझे रनटाइम पर गतिशील रूप से एक xml फ़ाइल जनरेट करनी होगी। कृपया PHP का उपयोग करते हुए गतिशील रूप से नीचे XML फ़ाइल बनाने में मेरी मदद करें।

<?xml version="1.0" encoding="UTF-8"?>
<xml>
 <track>
     <path>song1.mp3</path>
     <title>Track 1 - Track Title</title>
 </track>
 <track>
     <path>song2.mp3</path>
     <title>Track 2 - Track Title</title>
 </track>
 <track>
     <path>song3.mp3</path>
     <title>Track 3 - Track Title</title>
 </track>
 <track>
     <path>song4.mp3</path>
     <title>Track 4 - Track Title</title>
 </track>
 <track>
     <path>song5.mp3</path>
     <title>Track 5 - Track Title</title>
 </track>
 <track>
     <path>song6.mp3</path>
     <title>Track 6 - Track Title</title>
 </track>
 <track>
     <path>song7.mp3</path>
     <title>Track 7 - Track Title</title>
 </track>
 <track>
     <path>song8.mp3</path>
     <title>Track 8 - Track Title</title>
 </track>


1
इसके अलावा रिमेम्बर, xml 1.0 सभी खोज इंजनों द्वारा समर्थित नहीं है। मैं आपको xml 0.9 की सलाह देता हूं क्योंकि सबसे ज्ञात xml संस्करण है!
डोमुता मार्सेल

PHP और MySQL का उपयोग करके XML फ़ाइल उत्पन्न करें - kvcodes.com/2017/03/generate-xml-file-use-php-mysql
Kvvaradha

1
@ कवर्धा जो एक अच्छा समाधान नहीं है
रोबर्टमैन

जवाबों:


358

मैं SimpleXMLElement का उपयोग करता हूं ।

<?php

$xml = new SimpleXMLElement('<xml/>');

for ($i = 1; $i <= 8; ++$i) {
    $track = $xml->addChild('track');
    $track->addChild('path', "song$i.mp3");
    $track->addChild('title', "Track $i - Track Title");
}

Header('Content-type: text/xml');
print($xml->asXML());

12
SimpleXml के साथ एन्कोडिंग निर्दिष्ट करना संभव है? यह कैसे किया जा सकता है?
ईनीकी

1
नमस्ते, मैं उदाहरण के लिए उर की कोशिश की, लेकिन मान्यता में मुझे 2 चेतावनी मिल रही है। उन्हें कैसे साफ़ करें? validator.w3.org/…
Satya

3
@Eineki सिर्फ <?xml version="1.0" encoding="WHATEVER_IT_IS"?>प्रोसेसिंग निर्देश जोड़ें । मुझे विश्वास है, SimpleXMLElement सही काम करेगा: सभी queried स्ट्रिंग मानों को अपने mb_internal_encoding में परिवर्तित करना।
इवान क्रेचेव

33
$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><Person></Person>");
केबियांग

मुझे कॉलम 6 पर 'लाइन 2 पर त्रुटि': एक्सएमएल घोषणा केवल दस्तावेज के शुरू होने की अनुमति है; कोड xml की शुरुआत में अतिरिक्त खाली लाइन जोड़ता है जो पार्सिंग त्रुटि का कारण बनता है।
एलिया वीस

179

PHP में XMLdocument बनाने के लिए आपको DOMDocument वर्ग का उदाहरण देना चाहिए, चाइल्ड नोड्स बनाएं और इन नोड्स को डॉक्यूमेंट ट्री की सही ब्रांच में जोड़ें।

संदर्भ के लिए आप http://it.php.net/manual/en/book.dom.php पढ़ सकते हैं

अब हम नीचे दिए गए कोड का त्वरित दौरा करेंगे।

  • पंक्ति 2 पर हम एक खाली xml दस्तावेज़ बनाते हैं (बस xml संस्करण निर्दिष्ट करें) और एन्कोडिंग (utf8)
  • अब हमें xml ट्री को पॉप्युलेट करना होगा:
    • हमें एक xmlnode (पंक्ति 5) बनाना है
    • और हमें इसे सही स्थिति में जोड़ना होगा। हम रूट बना रहे हैं, इसलिए हम इसे सीधे डोमडीकुलम में जोड़ते हैं।
    • नोट बनाएँ तत्व तत्व को नोड में जोड़ते हैं और डाले गए नोड को वापस करते हैं, हम इस संदर्भ को रूट नोड (मूल रूप से xml) कहा जाता है।

ये मूल बातें हैं, आप केवल एक पंक्ति में नोड बना सकते हैं और जोड़ सकते हैं (उदाहरण के लिए), आप डोम एपीआई के साथ बहुत सी अन्य चीजें कर सकते हैं। यह आप पर निर्भर है।

<?php    
    /* create a dom document with encoding utf8 */
    $domtree = new DOMDocument('1.0', 'UTF-8');

    /* create the root element of the xml tree */
    $xmlRoot = $domtree->createElement("xml");
    /* append it to the document created */
    $xmlRoot = $domtree->appendChild($xmlRoot);

    $currentTrack = $domtree->createElement("track");
    $currentTrack = $xmlRoot->appendChild($currentTrack);

    /* you should enclose the following two lines in a cicle */
    $currentTrack->appendChild($domtree->createElement('path','song1.mp3'));
    $currentTrack->appendChild($domtree->createElement('title','title of song1.mp3'));

    $currentTrack->appendChild($domtree->createElement('path','song2.mp3'));
    $currentTrack->appendChild($domtree->createElement('title','title of song2.mp3'));

    /* get the xml printed */
    echo $domtree->saveXML();
?>

संपादित करें: सिर्फ एक अन्य संकेत: xml को प्रिंट करने के बजाय xmldocument (डोम दस्तावेज़ एक या सिंप्लेक्स एक) का उपयोग करने का मुख्य लाभ यह है कि xmltree xpath क्वेरी के साथ खोजा जा सकता है


6
क्या मैं फिर से उपयोग कर सकता हूं $domtree->save('mypath/xmlfile.xml');?
गिटारवादक

1
@guitarlass आप सही हैं। सहेजें और saveXML समान हैं: पहला एक फ़ाइल में xmltree को डंप करें, दूसरा एक स्ट्रिंग में (और आप इसे सामान्य फ़ाइल बचत निर्देशों के साथ निम्नलिखित चरण में सहेज सकते हैं)।
इनेकी

4
@jjonesdesign आपको आलसी होने के लिए आवश्यक ज्ञान प्राप्त करने के लिए कड़ी मेहनत करनी होगी :)
ईनेकी

1
उदाहरण XML तत्वों द्वारा तोड़ने के बजाय एक लंबी लाइन उत्पन्न करता है। आपको $domtree->formatOutput = true;आउटपुट सुंदर बनाने के लिए जोड़ना होगा :)
JackTheKnife

1
@ ड्रेनिल एक उपयुक्त सामग्री-प्रकार के हेडर और a Content-Disposition: attachmentजोड़ते हैं और saveXml परिणाम प्रिंट करते हैं। आप एक फ़ाइल नाम भी सुझा सकते हैं।
आइनेकी

27

ऐसा करने का एक आसानी से टूटा हुआ तरीका है:

<?php
// Send the headers
header('Content-type: text/xml');
header('Pragma: public');
header('Cache-control: private');
header('Expires: -1');
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";

echo '<xml>';

// echo some dynamically generated content here
/*
<track>
    <path>song_path</path>
    <title>track_number - track_title</title>
</track>
*/

echo '</xml>';

?>

इसे .php के रूप में सहेजें


18
जब चरों को कोण ब्रैकेट और ampersands में XML मेटाचैकर में रखा जाता है तो आसान, लेकिन त्रुटियों की संभावना होती है
मैथ्यू लॉक

15

फ्लुइडएक्सएमएल के साथ आप बहुत आसानी से अपने एक्सएमएल उत्पन्न कर सकते हैं।

$tracks = fluidxml('xml');

$tracks->times(8, function ($i) {
    $this->add([
        'track' => [
            'path'  => "song{$i}.mp3",
            'title' => "Track {$i} - Track Title"
        ]
    ]);

});

https://github.com/servo-php/fluidxml


2
अंतिम रिलीज में फ्लुइडएक्सएमएल PHP 5 का समर्थन करता है ।
डेनियल ऑरलैंडो

4
कुछ करने के लिए एक बाहरी पुस्तकालय जो सरल PHPML के साथ देशी PHP में आसानी से किया जा सकता है वह समाधान नहीं है।
रॉबर्टबैन

4

टिनी लेकिन मजबूत टेंपलेटिंग सिस्टम पर एक नजर । यह आमतौर पर HTML को गति देने के लिए उपयोग किया जाता है, लेकिन एक्सएमएल फ़ाइलों के साथ काम करने वाला एक एक्सटेंशन है। मैं उन रिपोर्ट बनाने के लिए बड़े पैमाने पर उपयोग करता हूं जहां मेरे पास एक कोड फ़ाइल और दो टेम्पलेट फाइलें हो सकती हैं - htm और xml - और उपयोगकर्ता तब चुन सकता है कि स्क्रीन या स्प्रेडशीट को रिपोर्ट भेजनी है या नहीं।

एक और फायदा यह है कि आपको स्क्रैच से xml को कोड नहीं करना पड़ता है, कुछ मामलों में मैं बहुत बड़े कॉम्प्लेक्स स्प्रेडशीट निर्यात करना चाहता हूं, और इसके बजाय सभी एक्सपोर्ट को कोड करने की आवश्यकता है जो कि मौजूदा स्प्रेडशीट को बचाने के लिए है। एक्सएमएल और कोड टैग में विकल्प जहां डेटा आउटपुट की आवश्यकता होती है। यह काम करने का एक त्वरित और बहुत ही कुशल तरीका है।


-14
$query=mysql_query("select * from tablename")or die(mysql_error()); 
$xml="<libraray>\n\t\t";
while($data=mysql_fetch_array($query))
{

    $xml .="<mail_address>\n\t\t";
    $xml .= "<id>".$data['id']."</id>\n\t\t";
    $xml .= "<email>".$data['email_address']."</email>\n\t\t";
    $xml .= "<verify_code>".$data['verify']."</verify_code>\n\t\t";
    $xml .= "<status>".$data['status']."</status>\n\t\t";
    $xml.="</mail_address>\n\t";
}
$xml.="</libraray>\n\r";
$xmlobj=new SimpleXMLElement($xml);
$xmlobj->asXML("text.xml");

इसका सरल सिर्फ आपके डेटाबेस से जुड़ता है यह आपके प्रोजेक्ट फ़ोल्डर में test.xml फ़ाइल बनाएगा


26
यह एक ऐसा कोड है जिसे कभी भी उत्पादन नहीं देखना चाहिए। आपके द्वारा छोड़े गए डेटा के आधार पर, आप अमान्य (यानी अप्राप्य) XML बना सकते हैं। यह सबसे अच्छा मैला है, और भले ही यह आसान लग सकता है क्योंकि आप कोड की कुछ लाइनों को बचा सकते हैं, यह रखरखाव और डिबगिंग के मामले में आपको बाद में अधिक खर्च करेगा; उस गरीब आदमी का उल्लेख नहीं करना चाहिए जो किसी दिन आपके काम की जिम्मेदारी ले सकता है।
अर्ने

3
-1 पहले कुछ वाना-बी-एक्सएमएल के साथ एक स्ट्रिंग को संक्षिप्त करना, फिर उस स्ट्रिंग को सिम्पलेक्स एक्सएमएल में धकेलना - यह सिर्फ उल्टा दिखाई देता है। इसके बजाय पहले XML लाइब्रेरी ऑब्जेक्ट को इनिशियलाइज़ करें, फिर XML बनाने के लिए इसका उपयोग करें। यह आसान है, कम मेमोरी का उपयोग करता है, कम त्रुटि वाला है और आपको एक्सएमएल को फाइल या स्टडआउट से स्ट्रीम करने की अनुमति देता है।
हक्रे

2
शायद यह उत्तर हटाने का समय है (और आपको अपनी खोई हुई प्रतिष्ठा वापस मिल जाएगी!)।
जोस मैनुअल अबरका रोड्रिग्ज

मुझे लगता है कि इसे रहना चाहिए। मैंने पहली बार एक्सएमएल के साथ काम करते हुए कुछ कोड खुद बनाए और यह कुछ इस तरह दिखाई दिया, इसलिए यह देखना बहुत सहायक था कि क्या नहीं करना है।
पीटर होजलुंड एंडरसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.