PHP simpleXML स्वरूपित तरीके से फ़ाइल को कैसे सहेजना है?


88

मैं PHP के SimpleXML का उपयोग करके एक मौजूदा XML फ़ाइल में कुछ डेटा जोड़ने की कोशिश कर रहा हूं। समस्या यह है कि सभी डेटा को एक पंक्ति में जोड़ा जाता है:

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

और इसी तरह। सभी एक ही लाइन में। लाइन ब्रेक कैसे लगाएं?

मैं इसे इस तरह कैसे बनाऊं?

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

मैं asXML()फंक्शन का इस्तेमाल कर रहा हूं ।

धन्यवाद।


PEAR XML_Beautifier पैकेज भी है।
karim79

जवाबों:


148

आप अपने कोड को पुन: स्वरूपित करने के लिए DOMDocument वर्ग का उपयोग कर सकते हैं :

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

धन्यवाद। सरल और कुशल।
एंड्री ड्यूमा

3
तो यह SimpleXML के साथ संभव नहीं है?
जोनाथन

@ xcy7e नहीं, मुझे ऐसा नहीं लगता।
गुम्बो

1
जब मैंने उस सामग्री को प्रारूपित करने की कोशिश की, जिसे मैं किसी फ़ाइल में संलग्न कर रहा था, तो यह केवल तभी काम करता था जब मैंने मौजूदा सामग्री को लोड करने से पहले संरक्षित संरक्षित किया हो।
सैम

30

गुम्बो का हल टोटका करता है। आप ऊपर simpleXml के साथ काम कर सकते हैं और फिर इसे गूंज के अंत में जोड़ सकते हैं और / या स्वरूपण के साथ इसे बचा सकते हैं।

इकोस के नीचे का कोड इसे एक फाइल में सहेजता है (कोड में टिप्पणी देखें और जो आप नहीं चाहते हैं उसे हटा दें):

//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एक DOMElement में परिवर्तित करने के लिए उपयोग करें । फिर आउटपुट को प्रारूपित करने की इसकी क्षमता का उपयोग करें।

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

काम नहीं करता है। फ़ंक्शन एक DOMElement, एक DOMDocument नहीं
karka91

लगता है documentElementहोना चाहिए ownerDocument। यकीन नहीं होता कि एपी बदल गया या यह सिर्फ एक टाइपो है। मैंने इसे अब ठीक कर दिया है।
troelskn

3
कृपया ध्यान दें कि यह अभी भी संरक्षित करने के रूप में काम नहीं करता है और किसी भी प्रभाव के लिए दस्तावेज़ को आयात करने से पहले प्रारूप को सेट किया जाना चाहिए :)
karka91

रुची - ठीक है तुम। लगता है कि गुम्बो का जवाब हालांकि काम करेगा।
troelskn

2

जैसा कि गुम्बो और विटमैन ने उत्तर दिया; DOMDocument :: load और DOMDocument :: save के साथ मौजूदा फ़ाइल से XML डॉक्यूमेंट लोड करना और सहेजना (हम यहां बहुत सारे नए हैं) ।

<?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);
}
?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.