php - PHP DomDocument 格式不正确
问题描述
我正在尝试让我的 PHP 更新现有的 XML 文件,但它并不能完全按照它的预期工作。PHP 代码假设在 xml 文件的根元素中添加一个带有元素的子节点。但不知何故,格式无法正常工作,它将所有新添加的 xml 元素放在一行中。如果我从 php 中删除 lastChild-option,它将新添加的 xml 元素放在根目录之外,但格式化 xml 正确。
现有 XML 文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
</root>
示例 PHP 代码:
$file = 'DEFAULT_DATE_CONVERSION4.xml';
$xml = new DOMDocument();
$xml->load($file);
$xml2 = $xml->documentElement->getElementsByTagName('datetimes');
$app = $xml->createElement('testing');
$testtext = "test";
$app->appendChild($xml->createElement('test', $testtext));
$app->appendChild($xml->createElement('test1', $testtext));
$app->appendChild($xml->createElement('test2', $testtext));
$app->appendChild($xml->createElement('test3', $testtext));
$xml->lastChild->appendChild($app);
$xml->formatOutput = true;
$xml->saveXML();
$xml->save("test.xml");
结果:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing><test>test</test><test1>test</test1><test2>test</test2><test3>test</test3></testing></root>
预期结果:
<?xml version="1.0" encoding="UTF-8"?>
<datetimes>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test</test1>
<test2>test</test2>
<test3>test</test3>
</testing>
</datetimes>
解决方案
您应该通过标记为不保留空格(preserveWhiteSpace
)然后formatOutput
在加载文档时设置为格式输出()来获得您想要的结果......
$file = 'DEFAULT_DATE_CONVERSION4.xml';
$xml = new DOMDocument();
$xml->formatOutput = true;
$xml->preserveWhiteSpace = FALSE;
$xml->load($file);
$app = $xml->createElement('testing');
$testtext = "test";
$app->appendChild($xml->createElement('test', $testtext));
$app->appendChild($xml->createElement('test1', $testtext));
$app->appendChild($xml->createElement('test2', $testtext));
$app->appendChild($xml->createElement('test3', $testtext));
$xml->lastChild->appendChild($app);
$xml->save("test.xml");
推荐阅读
- javafx - 导入 jar 文件时,Scene Builder 崩溃
- c++ - 如何忽略 C++ 中的某些输入行?
- docker - Dockerizing 使用 webpack 的 vue.js 应用程序
- c# - 在 gridView ASP.NET 中显示文件夹中的图像
- javascript - 敲除绑定未在 html 中更新
- javascript - 如何在对象数组 JSON 中获取值和键
- java - LineHeightFactor 和 LineSpace 与 Spannable
- ssl - 如何使用 CLI 创建根证书颁发机构?[OSX]
- google-analytics - 使用 GTM 跟踪 VirtualPageiew 数据层
- kubernetes - 使用静态 IP 公开 Ladbalancer