কীভাবে গতিশীলভাবে পিএইচপি ব্যবহার করে এক্সএমএল ফাইল তৈরি করবেন?


233

রানটাইমে আমাকে গতিশীলভাবে একটি এক্সএমএল ফাইল তৈরি করতে হবে। পিএইচপি ব্যবহার করে দয়া করে নীচের এক্সএমএল ফাইল তৈরি করতে আমাকে সহায়তা করুন।

<?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
এছাড়াও মনে রাখবেন, এক্সএমএল 1.0 সমস্ত অনুসন্ধান ইঞ্জিন দ্বারা সমর্থিত নয়। আমি আপনাকে xML 0.9 প্রস্তাব দিচ্ছি কারণ এটি সর্বাধিক পরিচিত এক্সএমএল সংস্করণ!
ডোমুটা মার্সেল

পিএইচপি এবং মাইএসকিউএল ব্যবহার করে এক্সএমএল ফাইল জেনারেট করুন - kvcodes.com/2017/03/generate-xML-file-used-php-mysql
Kvvaradha

1
@ কেভরাধা যে ভাল সমাধান নয়
রবার্টমেইন

উত্তর:


358

আমি সিম্পল এক্সএমলেমেন্ট ব্যবহার করতাম

<?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
সিম্পল এক্সএমএল দিয়ে এনকোডিং নির্দিষ্ট করা সম্ভব? এটা কিভাবে করা যায়?
Eineki

1
হাই, আমি আপনার উদাহরণ চেষ্টা করেছি কিন্তু বৈধতার মধ্যে আমি 2 সতর্কতা পাচ্ছি? সেগুলি সাফ করার জন্য কীভাবে? validator.w3.org/…
সত্য

3
@ আইনিকি কেবল <?xml version="1.0" encoding="WHATEVER_IT_IS"?>প্রক্রিয়াকরণের নির্দেশ যুক্ত করুন। আমি বিশ্বাস করি, সিম্পল এক্সএমলেমেন্ট সঠিক কাজটি করবে: সমস্ত কোয়েরি স্ট্রিংয়ের মানগুলিকে আপনার এমবি_সেন্টাল_ইনকোডিংয়ে রূপান্তর করে।
ইভান ক্রেচেতোভ

33
$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><Person></Person>");
কেবিয়াং

আমি 'কলাম 6-এ লাইন 2 এ ত্রুটি পেয়েছি: এক্সএমএল ঘোষণাটি কেবলমাত্র নথির শুরুতে অনুমোদিত'; কোডটি এক্সএমএলের শুরুতে অতিরিক্ত খালি লাইন যুক্ত করে যা পার্সিং ত্রুটির কারণে ঘটে।
এলিয়া ওয়েইস

179

পিএইচপি-তে একটি এক্সএমএল ডকুমেন্ট তৈরি করতে আপনার অবশ্যই একটি ডমডকুমেন্ট ক্লাস করা উচিত, চাইল্ড নোড তৈরি করতে হবে এবং ডকুমেন্ট গাছের সঠিক শাখায় এই নোডগুলি যুক্ত করতে হবে।

রেফারেন্সের জন্য আপনি http://it.php.net/manual/en/book.dom.php পড়তে পারেন

এখন আমরা নীচের কোডটিতে একটি দ্রুত ভ্রমণ করব।

  • লাইন 2 এ আমরা একটি খালি এক্সএমএল ডকুমেন্ট তৈরি করি (কেবল এক্সএমএল সংস্করণ (1.0) এবং এনকোডিং (utf8) উল্লেখ করুন
  • এখন আমাদের এক্সএমএল ট্রিটি বসানো দরকার:
    • আমাদের একটি এক্সএমএনএনড তৈরি করতে হবে (লাইন 5)
    • এবং আমাদের এটি সঠিক অবস্থানে যুক্ত করতে হবে। আমরা মূলটি তৈরি করছি যাতে আমরা এটি সরাসরি ডোমডোকামেন্টে যুক্ত করি।
    • নোট তৈরি করুন উপাদানটি নোডে যুক্ত করুন এবং nোকানো নোডটি ফিরে আসুন, আমরা ট্র্যাক নোডগুলি রুট নোডে সংযুক্ত করার জন্য এই রেফারেন্সটি সংরক্ষণ করি (ঘটনাক্রমে xML বলা হয়)।

এগুলি বেসিক, আপনি কেবল একটি লাইনে নোড তৈরি এবং সংযুক্ত করতে পারেন (উদাহরণস্বরূপ, 13), আপনি ডোম এপিআই সহ আরও অনেক কিছুই করতে পারেন can এটা আপনার উপরে।

<?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();
?>

সম্পাদনা: অন্য একটি ইঙ্গিত: এক্সএমএলডোকোয়েন্ট (ডম ডকুমেন্ট এক বা সিমপ্লেসএমএল এক) প্রিন্টের পরিবর্তে ব্যবহার করার মূল সুবিধাটি হ'ল এক্সএমথ্রি এক্সপথ ক্যোয়ারী সহ অনুসন্ধানযোগ্য


6
আমি আবার ব্যবহার করতে $domtree->save('mypath/xmlfile.xml');পারি?
গিটারলাস

1
আপনি ঠিক বলেছেন সেভ এবং সেভ এক্সএমএল একই রকম: প্রথম xmltree একটি ফাইলে ডাম্প করুন, দ্বিতীয়টি স্ট্রিংয়ে ফেলে দিন (এবং আপনি এটি সাধারণ ফাইল সংরক্ষণের নির্দেশাবলীর সাহায্যে নিম্নলিখিত ধাপে সংরক্ষণ করতে পারেন)।
Eineki

4
@ jjonesdesign অলস হওয়ার জন্য প্রয়োজনীয় জ্ঞান অর্জনের জন্য আপনাকে কঠোর পরিশ্রম করতে হবে :)
আইনিকি

1
এক্সএমএল উপাদানগুলি ভেঙে উদাহরণের পরিবর্তে একটি দীর্ঘ লাইন উত্পন্ন করে। $domtree->formatOutput = true;আউটপুটটিকে সুন্দর করার জন্য আপনাকে যুক্ত করতে হবে :)
জ্যাক দ্য নইনিফ

1
@ ড্রেনাইল একটি উপযুক্ত কন্টেন্ট-টাইপ শিরোলেখ এবং একটি যুক্ত করুন 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
সহজ, তবে ত্রুটিগুলির প্রবণ যখন ভেরিয়েবলগুলি ইন্টারপোল্ট করা হয় যার মধ্যে এক্সএমএল মেটাচার্যাক্টর রয়েছে যেমন অ্যাঙ্গেল বন্ধনী এবং অ্যাম্পারস্যান্ডস
ম্যাথিউ লক

15

সঙ্গে FluidXML আপনি খুব easly আপনার XML তৈরি করতে পারেন।

$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
শেষ প্রকাশে ফ্লুডএক্সএমএল পিএইচপি 5 সমর্থন করে ।
ড্যানিয়েল অরল্যান্ডো

4
সিম্পল এক্সএমএল সহ স্থানীয় পিএইচপিতে সহজেই করা যায় এমন কিছু করার জন্য একটি বাহ্যিক গ্রন্থাগার সমাধান নয়।
রবার্টমেইন

4

কটাক্ষপাত ক্ষুদ্র কিন্তু শক্তিশালী টেমপ্লেট সিস্টেম। এটি সাধারণত HTML টেম্পলেট করার জন্য ব্যবহৃত হয় তবে এক্সটেনশন রয়েছে যা এক্সএমএল ফাইলগুলির সাথে কাজ করে files আমি এগুলি এমন প্রতিবেদন তৈরির জন্য ব্যাপকভাবে ব্যবহার করি যেখানে আমার কাছে একটি কোড ফাইল এবং দুটি টেম্পলেট ফাইল থাকতে পারে - এইচটিএম এবং এক্সএমএল - এবং ব্যবহারকারী তখন স্ক্রিন বা স্প্রেডশিটে কোনও প্রতিবেদন প্রেরণ করবেন কিনা তা চয়ন করতে পারেন।

আরেকটি সুবিধা হ'ল আপনাকে স্ক্র্যাচ থেকে এক্সএমএল কোড করতে হবে না, কিছু ক্ষেত্রে আমি খুব বড় জটিল স্প্রেডশিট রফতানি করতে চাইছিলাম, এবং সমস্ত রফতানি কোডের পরিবর্তে প্রয়োজনীয় সমস্ত স্প্রেডশিট সংরক্ষণ করতে হবে xML এবং কোড ট্যাগগুলির বিকল্প যেখানে ডেটা আউটপুট প্রয়োজন required এটি কাজ করার একটি দ্রুত এবং খুব দক্ষ উপায়।


-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");

এটি কেবলমাত্র আপনার ডাটাবেসের সাথে সংযোগ স্থাপন করে এটি আপনার প্রকল্প ফোল্ডারে টেস্ট.এক্সএমএল ফাইল তৈরি করবে


26
এটি এমন ধরণের কোড যা কখনই উত্পাদন দেখতে পাওয়া উচিত নয়। আপনি যে ডেটা আউটপুট করেন তার উপর নির্ভর করে আপনি অকার্যকর (অর্থাত্ আনসারসযোগ্য) এক্সএমএল তৈরি করতে পারেন। এটি সর্বোপরি opালু এবং এটি সহজ মনে হলেও আপনি কয়েকটি লাইনের কোড সংরক্ষণ করতে পারেন, তবে এটি রক্ষণাবেক্ষণ এবং ডিবাগিংয়ের ক্ষেত্রে আপনাকে আরও বেশি ব্যয় করতে হবে; কোনও দিন আপনার কাজের দায়ভার নিতে পারে এমন দরিদ্র লোকটির কথা উল্লেখ করবেন না।
অ্যারেন

3
-1 প্রথমে কিছু চাওয়া-হওয়া-এক্সএমএল দিয়ে একটি স্ট্রিং সংমিশ্রণ করা, তারপরে সেই স্ট্রিংটিকে সিম্পল এক্সএমএল-তে ঠেলাঠেলি করে - এটি কেবল উল্টোদিকে উল্টানো দেখায়। পরিবর্তে প্রথমে এক্সএমএল লাইব্রেরি অবজেক্টটি আরম্ভ করুন, তারপরে এটি এক্সএমএল তৈরি করতে ব্যবহার করুন। এটি সহজ, কম স্মৃতি ব্যবহার করে, কম ত্রুটিযুক্ত প্রবণ এবং আপনাকে এক্সএমএল ফাইল বা স্টডআউটে প্রবাহিত করতে দেয়।
hakre

2
সম্ভবত এই উত্তরটি মুছে ফেলার সময় এসেছে (এবং আপনি আপনার হারিয়ে যাওয়া খ্যাতি ফিরে পাবেন!)।
হোসে ম্যানুয়েল অ্যাবারকা রদ্রিগেজ

আমি মনে করি এটি থাকা উচিত। আমি এক্সএমএল এর সাথে প্রথমবার কাজ করার সময় নিজেই কিছু কোড তৈরি করেছিলাম এবং এটি দেখতে কিছুটা এ জাতীয় দেখায় তাই কী করা উচিত নয় তা দেখতে খুব সহায়ক হয়েছিল।
পিটার হজলুন্ড অ্যান্ডারসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.