0

我正在尝试使用 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>

我哪里错了?

请提前帮助和感谢:-)

4

2 回答 2

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>
于 2012-10-05T18:05:39.290 回答
0

您可能想尝试先删除所有空格,然后再进行格式化。

强制它从头开始重新制作 xml。

$xml->preserveWhiteSpace = false; 
$xml->formatOutput = true;
于 2012-10-05T18:06:23.863 回答