2012-03-27 2 views
0

httpsで送信されるファイルがあり、PHPスクリプトで処理しています。各xml要素(php)の後にキャリッジリターンを追加する必要があります

データを使用して受け入れられている:それは1行として書き込まれたファイルに書き込まれている場合

$data = file_get_contents('php://input') 

私たちの内部システム(IBMパワー7)のために、各xml要素の後ろに改行を追加する必要があると私は言います。

だから、ファイルが現在のように、エディタで開きます:各終了タグや子供たちとタグの後に「\ n」を挿入する必要が

<root> 
<element1> 
<element2></element2> 
</element1> 
</root> 

<root><element1><element2></element2></element1></root> 

私はそれをする必要があります。

アイデア?

+0

私は確信していませんが、要素の最後に '\ n'を試しましたか? –

+0

もっとコードを表示する! – ajreal

+0

誰かのようなサウンドは、実際のエディターではなく、メモ帳を使用してファイルを開きます。 –

答えて

2

formatOutputオプションを使用します。

+0

私は試しました:$ doc = new DOMDocument(); $ doc-> formatOutput = true; $ doc-> loadXML($ data); $ doc-> save( "data/test.xml");同じ形式で保存しても返品はありません。 – rsmarsha

+0

ファイルをロードした後、formatOutputを[here](http://stackoverflow.com/questions/768215/php-pretty-print-html-not-tidy)のように設定します。 – ceving

+0

また、メモ帳でも1行で表示されます。 : – rsmarsha

2

改行を挿入するだけであれば、正規表現は問題ありません。

ただし、start parsing XML with Regular Expressionsを使用しないでください。

は、これを試してください

$xml = preg_replace(
     '=(<(.*?)>)(?![^<>]*</\2>|$)=s', 
     "\\1\n", 
     file_get_contents('php://input')); 

発現はEOFまたは negative lookahead assertion [(?!..)]とbackreferenceを使用してタグを閉じマッチングが続いていないすべてのXMLタグと一致します。

+1

正規表現のハッキングは[CDATA](http://en.wikipedia.org/wiki/CDATA)の部分では失敗します。 – ceving

+0

あなたは正しいですか? OPの文字列の中にCDATAがある場合、この正規表現は間に改行を挿入する可能性があります。 CDATAの例外は正規表現にも適用できます。しかし、正しい解決策は、cevingのようにXML DOMパーサーを使用していることです。 – Kaii

関連する問題