添加childnode后缺少格式化?

时间:2012-10-05 17:56:41

标签: php xml

我正在尝试使用PHP在XML文档中添加一个子节点,并且除了一件事之外到目前为止都没问题。无法正确格式化?

这是脚本:

$xmldoc = new DOMDocument();
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;
$xmldoc->loadXML('<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
  <udate>1347730639</udate>
  <userid>3</userid>
</data>');

echo "<xmp>OLD:\n". $xmldoc->saveXML() ."</xmp>";

$root = $xmldoc->firstChild;

$newElement = $xmldoc->createElement('popup');
$root->appendChild($newElement);
$newText = $xmldoc->createTextNode("0");
$newElement->appendChild($newText);

echo "<xmp>NEW:\n". $xmldoc->saveXML() ."</xmp>";

添加节点后,我得到了这个:

<data>
  <udate>1347730639</udate>
  <userid>3</userid>
<popup>0</popup></data>

我希望它是这样的:

<data>
  <udate>1347730639</udate>
  <userid>3</userid>
  <popup>0</popup>
</data>

我哪里出错了?

请提前帮助和感谢: - )

2 个答案:

答案 0 :(得分:0)

createElement会中断formatOutput这是一个普遍的问题

请参阅PHP BUG报告

但是你可以通过重新加载和格式化来解决问题。

$xmldoc = new DOMDocument();
$xmldoc->loadXML('<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
  <udate>1347730639</udate>
  <userid>3</userid>
</data>');

echo "<xmp>OLD:\n". $xmldoc->saveXML() ."</xmp>";

$root = $xmldoc->firstChild;

$newElement = $xmldoc->createElement('popup');
$root->appendChild($newElement);
$newText = $xmldoc->createTextNode("0");
$newElement->appendChild($newText);



$xml = new DOMDocument();
$xml->preserveWhiteSpace = false;
$xml->formatOutput = true;
$xml->loadXML( $xmldoc->saveXML());
echo "<xmp>NEW:\n". $xml->saveXML()."</xmp>";

输出

OLD:
<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
  <udate>1347730639</udate>
  <userid>3</userid>
</data>
NEW:
<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
  <udate>1347730639</udate>
  <userid>3</userid>
  <popup>0</popup>
</data>

答案 1 :(得分:0)

您可能希望先尝试删除所有空格,然后再格式化。

强制它从头开始重制xml。

$xml->preserveWhiteSpace = false; 
$xml->formatOutput = true;