পিএইচপি সিম্পল এক্সএমএল কীভাবে ফাইলটি ফর্ম্যাট করা যায়?


89

আমি পিএইচপি এর সিম্পল এক্সএমএল ব্যবহার করে একটি বিদ্যমান এক্সএমএল ফাইলে কিছু ডেটা যুক্ত করার চেষ্টা করছি। সমস্যাটি হ'ল এটি একক লাইনে সমস্ত ডেটা যুক্ত করে:

<name>blah</name><class>blah</class><area>blah</area> ...

ইত্যাদি। সব একক লাইনে। কিভাবে লাইন বিরতি পরিচয়?

আমি কীভাবে এটি তৈরি করব?

<name>blah</name>
<class>blah</class>
<area>blah</area>

আমি asXML()ফাংশন ব্যবহার করছি ।

ধন্যবাদ


পিয়ার এক্সএমএল_উইউটিফায়ার প্যাকেজটিও রয়েছে।
karim79

আমি জানি এটি বেশ পুরানো প্রশ্ন এবং আপনার অবশ্যই সমাধান খুঁজে পাওয়া উচিত। অন্যের জন্য উপকারী হতে পারে, এটি দেখুন github.com/spatie/array-to-xml
বৈভব মালুস্তে

উত্তর:


148

আপনি আপনার কোডটি পুনরায় ফর্ম্যাট করতে ডমডকুমেন্ট ক্লাসটি ব্যবহার করতে পারেন :

$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
echo $dom->saveXML();

ধন্যবাদ. সহজ এবং দক্ষ।
আন্দ্রে ডুমা

4
সিম্পল এক্সএমএল দিয়ে কি এটা সম্ভব নয়?
জোনাথন

@ xcy7e না, আমি এটি মনে করি না।
গম্বো

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

31

গম্বোর সমাধানটি কৌশলটি করে। আপনি উপরে সিম্পল এক্সএমএল নিয়ে কাজ করতে পারেন এবং তারপরে এটিকে ইকো করতে শেষে যুক্ত করুন এবং / অথবা বিন্যাসকরণের সাহায্যে এটি সংরক্ষণ করতে পারেন।

নীচের কোডটি এটি প্রতিধ্বনিত করে এবং এটি একটি ফাইলে সংরক্ষণ করে (কোডে মন্তব্য দেখুন এবং আপনি যা চান না তা সরিয়ে দিন):

//Format XML to save indented tree rather than one line
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
//Echo XML - remove this and following line if echo not desired
echo $dom->saveXML();
//Save XML to file - remove this and following line if save not desired
$dom->save('fileName.xml');

19

dom_import_simplexmlএকটি ডোমলেমে রূপান্তর করতে ব্যবহার করুন । তারপরে আউটপুট ফর্ম্যাট করতে তার ক্ষমতাটি ব্যবহার করুন।

$dom = dom_import_simplexml($simple_xml)->ownerDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
echo $dom->saveXML();

কাজ করে না ফাংশনটি একটি ডোমলেট সরবরাহ করে, একটি ডোমডোকামেন্টটি দেয় না
karka91

মনে documentElementহওয়া উচিত ownerDocument। নিশ্চিত নয় যে এপিআই পরিবর্তন হয়েছে বা এটি কেবল একটি টাইপো। আমি এখন এটি সংশোধন করেছি।
Troelskn

4
দয়া করে মনে রাখবেন যে এটি এখনও সংরক্ষণের জায়গা হিসাবে কাজ করে না হোয়াইটস্পেস এবং ফর্ম্যাটআউটপুটটি কোনও প্রভাব ফেলতে ডকুমেন্ট আমদানির আগে সেট করা উচিত :)
karka91

আকর্ষণীয় - ঠিক আপনি আছেন। দেখে মনে হচ্ছে গম্বোর উত্তরটি যদিও কাজ করবে।
আফ্রোসकन

2

গম্বো এবং উইটম্যান উত্তর হিসাবে ; লোড হচ্ছে এবং একটি বিদ্যমান ফাইল থেকে একটি XML দলিল সংরক্ষণ সঙ্গে (আমরা নতুনদের অনেক কাছাকাছি দর্শিত থাকবে) DOMDocument :: লোড এবং DOMDocument :: সংরক্ষণ

<?php
$xmlFile = 'filename.xml';
if( !file_exists($xmlFile) ) die('Missing file: ' . $xmlFile);
else
{
  $dom = new DOMDocument('1.0');
  $dom->preserveWhiteSpace = false;
  $dom->formatOutput = true;
  $dl = @$dom->load($xmlFile); // remove error control operator (@) to print any error message generated while loading.
  if ( !$dl ) die('Error while parsing the document: ' . $xmlFile);
  echo $dom->save($xmlFile);
}
?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.