首页 > 解决方案 > 附加到 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 文件的图片。

非常感谢!

我的 xml 文件的图像

标签: phpxml

解决方案


您需要在加载文件之前禁用空格保留,以便 DOMDocument 可以在不尝试保持原始格式的情况下自行处理。

$xml = new DOMDocument("1.0");
$xml->preserveWhiteSpace = false ;
$xml->formatOutput = true;

推荐阅读