我正在尝试使我的PHP更新成为现有的XML文件,但它完全按照它所支持的方式工作。 PHP代码假设在xml文件的根元素中添加一个包含元素的子节点。但不知何故,格式化不正确,它将所有新添加的xml元素放在一行中。 如果我从php中删除了lastChild-option,它会将新添加的xml-elements放在root之外,但格式化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>
答案 0 :(得分:1)
你应该通过标记不保留空格(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");