我正在尝试使用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>
我哪里出错了?
请提前帮助和感谢: - )
答案 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;