46

タイトルはほとんどそれをすべて言います。

私が(PHPサイトの例から)のようなものを持っている場合:

$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies></movies>
XML;

$sxe = new SimpleXMLElement($xmlstr);

$sxe->addAttribute('type', 'documentary');

$movie = $sxe->addChild('movie');
$movie->addChild('title', 'PHP2: More Parser Stories');
$movie->addChild('plot', 'This is all about the people who make it work.');

$characters = $movie->addChild('characters');
$character  = $characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');

$rating = $movie->addChild('rating', '5');
$rating->addAttribute('type', 'stars');


echo("<pre>".htmlspecialchars($sxe->asXML())."</pre>");

die();

私は次のような長い文字列を出力することになります:

<?xml version="1.0" standalone="yes"?>
<movies type="documentary"><movie><title>PHP2: More Parser Stories</title><plot>This is all about the people who make it work.</plot><characters><character><name>Mr. Parser</name><actor>John Doe</actor></character></characters><rating type="stars">5</rating></movie></movies>

これはプログラムの消費者にとっては問題ありませんが、デバッグ/ヒューマンタスクの場合、これを適切なインデント形式にする方法を知っている人はいますか?

4

3 に答える 3

79

SimpleXMLElement の PHP マニュアル ページのコメントには、さまざまな解決策があります。あまり効率的ではありませんが、確かに簡潔ですが、匿名によるソリューションです

$dom = dom_import_simplexml($simpleXml)->ownerDocument;
$dom->formatOutput = true;
echo $dom->saveXML();

PHP のマニュアル ページのコメントは、明らかに間違っているものを最初に除外する限り、多くの場合、一般的なニーズに適した情報源です。

于 2009-07-27T23:26:00.227 に答える
62

上記は私にとってはうまくいきませんでした。

$dom = new DOMDocument("1.0");
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
echo $dom->saveXML();
于 2013-04-29T15:19:02.517 に答える
8

同様の解決策を見つけました...生のxlmデータをフォーマットする..私のphp SOAP要求__getLastRequest & __getLastResponseから、xmlをすばやくデバッグするために、google-code-prettify.

機密性の高い xml データをフォーマットし、オンラインでフォーマットしたくない場合に適したソリューションです。

以下のいくつかのサンプルコードは、他の人に役立つかもしれません:

$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($data); //=====$data has the raw xml data...you want to format

echo '<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>';

echo "<br/> <pre class=\"prettyprint\" >". htmlentities($dom->saveXML())."</pre>";

以下は、私が得たフォーマット済み XML 出力のサンプルです。

注:フォーマットされた XML は で使用でき、$dom->saveXML()php file write を使用して xml ファイルに直接保存できます。

フォーマット済み XML 出力

于 2015-10-07T07:29:20.177 に答える