【问题标题】:php DOM XML generate XML with line break after reopening [duplicate]php DOM XML在重新打开后生成带有换行符的XML [重复]
【发布时间】:2013-02-21 09:45:42
【问题描述】:

所以我有这个代码

$domDoc = new DOMDocument;
$rootElt = $domDoc->createElement('CONFIG');
$rootNode = $domDoc->appendChild($rootElt);

$subElt = $domDoc->createElement('APP-ID');
$subNode = $rootNode->appendChild($subElt);

$textNode = $domDoc->createTextNode('166533e56');
$subNode->appendChild($textNode);

$domDoc->save('config.xml');

生成的

<CONFIG><APP-ID>166533e56</APP-ID></CONFIG>

这是没有换行符的。 当我添加

$domDoc->formatOutput = true;

就在代码的最后一行之前

$domDoc->save('config.xml');

现在输出很好:

<CONFIG>
  <APP-ID>166533e56</APP-ID>
</CONFIG>

但是,当我在另一个 php 中尝试打开 xml 并在其中写入一些内容时,无论我尝试什么,它都会以未格式化的形式附加在那里。

在我做的另一个 php 代码中:

$domDoc = new DOMDocument;
$domDoc->load('config.xml');

$rootNode = $domDoc->documentElement;
$config_root = $rootNode->getElementsByTagName("CONFIG");

$rootElt = $domDoc->createElement('USER-ID');
$subNode = $rootNode->appendChild($rootElt);

$textNode = $domDoc->createTextNode('333265332f');
$subNode->appendChild($textNode);

$rootElt = $domDoc->createElement('USER-NAME');
$sub2Node = $rootNode->appendChild($rootElt);

$textNode = $domDoc->createTextNode('John');
$sub2Node->appendChild($textNode);

$domDoc->formatOutput = true;
$domDoc->save('config.xml');    

导致

<CONFIG>
  <APP-ID>166533e56</APP-ID>
<USER-ID>333265332f</USER-ID><USER-NAME>John</USER-NAME></CONFIG>

这是完全错误的。应该是

<CONFIG>
  <APP-ID>166533e56</APP-ID>
  <USER-ID>333265332f</USER-ID>
  <USER-NAME>John</USER-NAME>
</CONFIG>

为什么没有添加换行符?我做错了什么?

【问题讨论】:

    标签: php xml dom object


    【解决方案1】:

    设置$domDoc-&gt;preserveWhiteSpace = false; 加载文件之前:

    $domDoc = new DOMDocument;
    $domDoc->preserveWhiteSpace = false;// <-- this line
    $domDoc->loadXML(<<<XML
    <?xml version="1.0"?>
    <CONFIG>
      <APP-ID>166533e56</APP-ID>
    </CONFIG>
    XML
    );
    
    $rootNode = $domDoc->documentElement;
    $config_root = $rootNode->getElementsByTagName("CONFIG");
    
    $rootElt = $domDoc->createElement('USER-ID');
    $subNode = $rootNode->appendChild($rootElt);
    
    $textNode = $domDoc->createTextNode('333265332f');
    $subNode->appendChild($textNode);
    
    $rootElt = $domDoc->createElement('USER-NAME');
    $sub2Node = $rootNode->appendChild($rootElt);
    
    $textNode = $domDoc->createTextNode('John');
    $sub2Node->appendChild($textNode);
    
    $domDoc->formatOutput = true;
    //$domDoc->save('config.xml');    
    echo $domDoc->saveXML();
    

    Live demo

    【讨论】:

    • #{$!有用!伙计,谢谢你 10x 我已经解决了 2 个小时了!
    猜你喜欢
    • 2012-05-04
    • 2012-03-02
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2013-12-23
    • 2011-08-18
    相关资源
    最近更新 更多