2009-04-28 137 views
81

我想使用PHP的SimpleXML將一些數據添加到現有的XML文件。問題是它把所有的數據加在一行:PHP simpleXML如何以格式化的方式保存文件?

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

等等。所有在一條線。如何引入換行符?

我該如何做到這一點?

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

我正在使用asXML()函數。

謝謝。

+0

還有PEAR [XML_Beautifier](http://pear.php.net/package/XML_Beautifier)包。 – karim79 2009-04-28 17:22:08

回答

133

您可以使用DOMDocument class重新格式化您的代碼:

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

謝謝。很棒。 – Alagu 2011-06-16 09:03:47

+0

謝謝。簡單而高效。 – 2013-07-03 14:34:46

+2

因此,SimpleXML是不可能的? – 2014-11-18 07:52:20

17

使用dom_import_simplexml轉換爲一個DOMElement。然後使用其容量來格式化輸出。

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

Gumbo的解決方案有訣竅。您可以使用上面的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'); 
2

由於GumboWitman回答;使用DOMDocument::loadDOMDocument::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); 
} 
?>