PHP SimpleXML新行

11

我使用PHP的SimpleXML创建了一个XML文件,并保存该文件。使用fopen在PHP中打开并打印文件内容时,我的XML看起来像这样:(见下文)

<?xml version="1.0" encoding="UTF-8"?>
<home><orderList><delivery_cost>0.00</delivery_cost><delivery_surname>TEST</delivery_surname><delivery_postcode>1234</delivery_postcode><status>1</status></orderList></home>

我想让xml文件的每个元素都缩进并在新行上显示。 有人知道如何实现吗?

谢谢


你是如何保存XML文件的? - Jan Hančič
3个回答

15
你可以使用formatOutput属性来完成这个操作,该属性属于DOMDocument
如果你想将XML保存到$xmlFilePath指定的文件中,可以按照以下方式保存,假设你的XML数据存储在变量$yourXML中:
$dom = new DOMDocument();
$dom->loadXML($yourXML);
$dom->formatOutput = true;
$formattedXML = $dom->saveXML();

$fp = fopen($xmlFilePath,'w+');
fwrite($fp, $formattedXML);
fclose($fp);

代码改编自这里

1
你也可以从SimpleXML对象中导入DOM表示形式到DOMElement/DOMDocument对象,然后在DOMDocument对象上设置formatOutput属性。这样,您就不必重新解析xml字符串。请参见http://docs.php.net/function.dom-import-simplexml和http://docs.php.net/class.domnode#domnode.props.ownerdocument。 - VolkerK
1
formatOutput 的问题在于它只能在没有文本节点的情况下工作。也就是说,如果两个节点之间有一个换行符,它将不会尝试美化输出。 - Josh Davis

4
这被称为“漂亮打印”,SimpleXML不支持此功能。如果您在Stack Overflow和其他网站上搜索,您会发现一些自定义解决方案可以实现此功能。
漂亮打印对于可视化很有用,但我不建议以该格式保存文档。
如果您仍在寻找漂亮的打印程序,您可以尝试SimpleDOM的asPrettyXML()函数。
include 'SimpleDOM.php';

$home = simpledom_load_string('<?xml version="1.0" encoding="UTF-8"?>
<home><orderList><delivery_cost>0.00</delivery_cost><delivery_surname>TEST</delivery_surname><delivery_postcode>1234</delivery_postcode><status>1</status></orderList></home>');

echo $home->asPrettyXML();

-4

在XML中换行请使用echo "\n";

使用ob_start(); echo ' ' . "\n";?>可以输出换行符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接