php - 在 simplexml_load_file php 中的 addChild() 之后添加换行符

标签 php xml

我使用 simplexml_load_file() 函数在现有的 xml 文件中添加了一个新的子文件。但是它不是格式化的东西。 我试过这段代码

   `$file = 'data/users.xml';
    $xml = simplexml_load_file($file);
    $xml->Users;
    $newuser = $xml->addChild('userdata');
    $newuser->addChild('userid', $data['id']);
    $newuser->addChild('name', $data['name']);
    $newuser->addChild('email', $data['email']);
    $newuser->addChild('mobile', $data['mobile']);
    $newuser->addChild('username', $data['user']);
    $newuser->addChild('password', $data['pass']);
    $newuser->addChild('role', $data['role']);

    $dom = dom_import_simplexml($xml)->ownerDocument;
    $dom->formatOutput = TRUE;
    $dom->save($file);`

结果是

`<userdata><name>agallery</name><filepath>path/to/gallery</filepath>
 <thumb>mythumb.jpg</thumb></userdata>`

但是我需要这样的格式

`<userdata>
 <name>agallery</name>
 <filepath>path/to/gallery</filepath>
 <thumb>mythumb.jpg</thumb>
 </userdata>`

最佳答案

当涉及到 XML 时,文档的格式并不重要,尽管它通常倾向于以结构化布局格式呈现。 SimpleXML 没有执行此操作的选项 (AFAIK),因此您可能必须使用 DOM 来执行此操作...

$dom = dom_import_simplexml($xml)->ownerDocument;
$dom->formatOutput = TRUE;
$dom->save($file);

这会获取文档,将其转换为 DOM,然后格式化输出。

编辑:这是一个常见的问题,格式有时似乎不起作用,变通办法似乎过多,但这就是变通办法有时最终会成为...

$dom = dom_import_simplexml($xml)->ownerDocument;
$dom->formatOutput = true;
$dom->preserveWhiteSpace = false;
$dom->loadXML( $dom->saveXML());
$dom->save($file);

关于php - 在 simplexml_load_file php 中的 addChild() 之后添加换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46904147/

相关文章:

php - 如何从 PHP 中的 MySQL 时间戳计数打印月份名称?

java - 无法使用 Android 中的 xstream 库序列化包含 ArrayList 的 java 对象

php - SimpleXML 中用于默认 namespace 的 XPath,无需前缀

java - 如何使用Jdom包?

php - 将数据从本地 MySQL 服务器加载到 Phonegap 应用程序

PHP获取数组中重复次数最多的值

php - 通过类别选择产品,woocommerce

php - 如何检测用户在 iframe 或直接 url 中打开我的 Facebook 应用程序

xml - 如何使用 iText 填写 XFA 表单?

c# - 验证 xml 到 xsd 以仅捕获特定错误