XML-创建元素-新行


XML - Create element - New line

如何在元素中创建新行?

我知道:

$currentTrack->appendChild($domtree->createElement('code', '    test1;
test2;
test3;'));

然而,它将
添加到每行的末尾。我该怎么摆脱它?


'r'n样式行结尾的回车部分。我认为DOMDocument对它进行编码是为了保留它。如果你检查XML规范,它说如果不进行编码,它将被规范化为'n

所以你有不同的选择:

  1. 忽略转义的实体,它们在xml解析器中被解码
  2. 使用CDATA元素,这里不进行规范化,因此DOMDocument认为没有必要转义"''r"
  3. 确保使用'n样式的行尾保存文件
  4. 在创建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;&#13;
test2;&#13;
test3;&#13;
</code>
  <code><![CDATA[test1;
test2;
test3;
]]></code>
  <code>test1;
test2;
test3;
</code>
</root>