【问题标题】:PHP DomDocument not formatting correctlyPHP DomDocument 格式不正确
【发布时间】:2018-05-15 20:04:31
【问题描述】:

我正在尝试让我的 PHP 更新一个现有的 XML 文件,但它并不能完全按照预期工作。 PHP 代码假设在 xml 文件的根元素中添加一个带有元素的子节点。但不知何故,格式无法正常工作,它将所有新添加的 xml 元素放在一行中。 如果我从 php 中删除 lastChild 选项,它会将新添加的 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>

【问题讨论】:

    标签: php xml domdocument xml-formatting


    【解决方案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");
    

    【讨论】:

    猜你喜欢
    • 2012-01-14
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多