php - 附加到 XML 的末尾时,formatOutput 不起作用,但在第一次创建文件时,formatOutput 工作正常
问题描述
这听起来很基本,但现在我很困惑。
现在我正在使用 php 创建一个 XML 文件,首先我检查该文件是否存在,如果他不存在,我将使用创建的第一个条目创建文件,但如果 XML 文件确实存在,那么 ill 将只是附加数据。数据会在需要时附加,并且文件正在创建而没有任何错误,但我遇到的唯一小问题是,当我将数据附加到文件末尾时,它不会格式化为常规瀑布格式,而是将其附加在一行中。这是我的php代码:
<?php
$id = $_POST['id_from'];
$id_to = $_POST['userid_to'];
$content = $_POST['message'];
$time = $_POST['time'];
$xml = new DOMDocument("1.0");
$xml->formatOutput = true;
$filename = 'chats/'.$id.'-'.$id_to.'.xml';
if(file_exists($filename)){
$xml->load($filename);
$messages = $xml->getElementsByTagName('messages')->item(0);
$message = $xml->createElement("message");
$messages->appendChild($message);
$content = $xml->createElement("content", $content);
$message->appendChild($content);
$to = $xml->createElement("to", $id_to);
$message->appendChild($to);
$from = $xml->createElement("from", $id);
$message->appendChild($from);
}else{
//creating root
$messages = $xml->createElement('messages');
$xml->appendChild($messages);
$message = $xml->createElement("message");
$messages->appendChild($message);
$content = $xml->createElement("content", $content);
$message->appendChild($content);
$to = $xml->createElement("to", $id_to);
$message->appendChild($to);
$from = $xml->createElement("from", $id);
$message->appendChild($from);
}
$xml->save($filename) or die("error");
?>
下面是我的 xml 文件的图片。
非常感谢!
解决方案
您需要在加载文件之前禁用空格保留,以便 DOMDocument 可以在不尝试保持原始格式的情况下自行处理。
$xml = new DOMDocument("1.0");
$xml->preserveWhiteSpace = false ;
$xml->formatOutput = true;
推荐阅读
- angular - 无法使用 ngx-sharebuttons 将 URL 属性绑定到 html 页面
- coq - 与自然数列表的最大元素的小于或等于关系
- python - 为什么调用 super().foo 和 super().__getattribute__("foo") 有区别
- c# - 模型状态立即返回 .Net Core 5
- javascript - Nodejs/Puppeteer 如何在不重新启动另一个 puppeteer 实例的情况下迭代地抓取网站?
- java - 在 Windows 10 中安装正在运行的弹性堆栈的 java 错误
- cygwin - 从与“C:\cygwin64\bin”不同的文件夹执行 Cygwin 的“bash.exe”得到功能失调的 BACKSPACE
- javascript - Twilio Autopiolet 有时消息不会显示给用户
- svn - SVN 工作副本有时会获取某些文件的旧版本
- python - 我正在尝试保存文件但出现错误