0

PHP を使用して XML ドキュメントに子ノードを追加しようとしていますが、これまでのところ、1 つのことを除いて問題ありません。正しくフォーマットできませんか?

スクリプトは次のとおりです。

$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バグレポートを見る

ただし、リロードしてフォーマットすることで回避できます。

$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 に答える