0

だから私はこのコードを持っています

$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>

改行が追加されていないのはなぜですか?私は何を間違えましたか?

4

1 に答える 1

1

$domDoc->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();

ライブデモ

于 2013-02-21T10:11:12.363 に答える