$ SimpleXML-> asXML()的格式输出;

Eli*_*Eli 36 php xml formatting simplexml

标题基本概括了所有内容.

如果我有类似的东西(从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();
Run Code Online (Sandbox Code Playgroud)

我最终输出一个长字符串,如下所示:

<?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>
Run Code Online (Sandbox Code Playgroud)

这对于程序使用者来说很好,但是对于调试/人工任务,有没有人知道如何将它变成一个漂亮的缩进格式?

Ada*_*ght 72

SimpleXMLElementPHP手册页上的注释中有各种解决方案.效率不高,但肯定是简洁的,是Anonymous的解决方案

$dom = dom_import_simplexml($simpleXml)->ownerDocument;
$dom->formatOutput = true;
echo $dom->saveXML();
Run Code Online (Sandbox Code Playgroud)

PHP手册页注释通常是常见需求的良好来源,只要您首先过滤掉明显错误的内容即可.

  • 根据 @karka91 在 ['原始问题'](http://stackoverflow.com/a/799792/1037948) 中的评论,您必须在导入 xml 之前声明 `DOMDocument`+config,因此 [this](http:// /stackoverflow.com/a/16282331/1037948)改为工作 (2认同)

小智 49

以上对我不起作用,我发现这有效:

$dom = new DOMDocument("1.0");
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
echo $dom->saveXML();
Run Code Online (Sandbox Code Playgroud)

  • 你应该把最后一行(`echo`)改为:`echo"<pre>".htmlentities($ dom-> saveXML())."</ pre>";` (8认同)
  • 我正在使用此功能,在输出内容类型的正确标头时不需要预标签.header('Content-type:text/xml'); (3认同)
  • <pre>,..为什么? (2认同)
  • @MirroredFate你在浏览器中看起来像XML,但是你正在输出HTML ...如果OP使用CLI PHP怎么办?如果OP想要输出到文件怎么办? (2认同)

nax*_*han 7

找到了一个类似的解决方案......从我的php SOAP请求中格式化原始xlm数据__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>";
Run Code Online (Sandbox Code Playgroud)

下面是我获得的格式化XML输出的示例:

注意:格式化的XML可用$dom->saveXML(),可以使用php文件写入直接保存到xml文件.

格式化XML输出