2009-04-28 9 views
81

PHPのSimpleXMLを使用して既存のXMLファイルにデータを追加しようとしています。問題は、すべてのデータを1行に追加することです。PHP simpleXMLファイルをフォーマットされた方法で保存する方法は?

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

などです。すべてが1行で表示されます。改行を導入するには?

どうすればいいですか?

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

私はasXML()機能を使用しています。

ありがとうございました。

+0

PEAR [XML_Beautifier](http://pear.php.net/package/XML_Beautifier)パッケージもあります。 – karim79

答えて

133

あなたはあなたのコードを再フォーマットするDOMDocument classを使用することができます。

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

ありがとうございます。よく働く。 – Alagu

+0

ありがとうございます。シンプルで効率的。 –

+2

したがって、SimpleXMLではできません。 –

17

はDOMELEMENTに変換しdom_import_simplexmlを使用してください。次に、出力をフォーマットするためにその容量を使用します。

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

は機能しません。この関数は、DOMDocumentではなくDOMElementを返します。 – karka91

+0

'documentElement'は' ownerDocument'である必要があります。 apiが変更されたかどうかは不明ですが、これは単なる入力ミスです。私は今それを修正しました。 – troelskn

+2

これは、preserveWhiteSpaceとformatOutputが設定されていて、何らかの効果を持つようにドキュメントをインポートする前に設定する必要があるため、まだ動作しないことに注意してください。 – karka91

27

グンボの解決策です。上記の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'); 
+0

はまだチャームのように動作します! – Risinek

2

GumboWitmanとして答えました。既存のファイル(ここでは多くの初心者が多い)からXML文書をロードして保存するには、DOMDocument::loadDOMDocument::saveが必要です。

<?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); 
} 
?> 
関連する問題