【问题标题】:XML - Create element - New lineXML - 创建元素 - 新行
【发布时间】:2013-12-29 19:34:47
【问题描述】:
如何在元素中创建新行?
我愿意:
$currentTrack->appendChild($domtree->createElement('code', ' test1;
test2;
test3;'));
但是,它将
 添加到每一行的末尾。我怎样才能摆脱它?
【问题讨论】:
标签:
php
xml
dom
domdocument
【解决方案1】:

 是\r\n 样式行结尾的回车部分。我认为 DOMDocument 对其进行编码以保留它。如果您检查XML specification,它会说如果未编码,它将被标准化为\n。
所以你有不同的选择:
- 忽略转义的实体,它们在 xml 解析器中被解码
- 使用 CDATA-Elements,这里没有进行规范化,所以 DOMDocument 认为不需要转义“\r”。
- 确保以
\n 样式的行结尾保存文件
- 在创建 DOM 之前将行尾规范化为
\n
这里有一些示例源来展示不同的行为:
$text = "test1;\r\ntest2;\r\ntest3;\r\n";
$dom = new DOMDocument('1.0', 'UTF-8');
$root = $dom->appendChild($root = $dom->createElement('root'));
$root->appendChild(
$node = $dom->createElement('code')
);
// text node - CR will get escaped
$node->appendChild($dom->createTextNode($text));
$root->appendChild(
$node = $dom->createElement('code')
);
// cdata - CR will not get escaped
$node->appendChild($dom->createCdataSection($text));
$root->appendChild(
$node = $dom->createElement('code')
);
// text node, CRLF and CR normalized to LF
$node->appendChild(
$dom->createTextNode(
str_replace(array("\r\n", "\r"), "\n", $text)
)
);
$dom->formatOutput = TRUE;
echo $dom->saveXml();
输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<code>test1;
test2;
test3;
</code>
<code><![CDATA[test1;
test2;
test3;
]]></code>
<code>test1;
test2;
test3;
</code>
</root>