XML - 创建元素 - 新行

时间:2013-12-11 17:19:36

标签: php xml dom domdocument

如何在元素中创建新行?

我做:

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

然而,它会在每行的末尾添加
。我怎么能摆脱它?

1 个答案:

答案 0 :(得分:4)


\r\n样式行结尾的回车部分。我认为DOMDocument会对其进行编码以保留它。如果您选中XML specification,则表示如果未编码,则会将其标准化为\n

所以你有不同的选择:

  1. 忽略转义的实体,它们会在xml解析器中解码
  2. 使用CDATA-Elements,此处不进行规范化,因此DOMDocument认为无需转义“\ r”。
  3. 确保使用\n样式行结尾保存文件
  4. 在创建DOM之前将行结尾规范化为\n
  5. 以下是一些显示不同行为的示例源:

    $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>