web-dev-qa-db-ja.com

新しいXMLファイルを作成してデータを書き込みますか?

新しいXMLファイルを作成し、サーバーに書き込む必要があります。そのため、新しいXMLファイルを作成し、いくつかのベースノードを書き込み、保存するための最良の方法を探しています。その後、もう一度開き、さらにデータを書き込みます。

ファイルを保存するためにfile_put_contents()を使用しています。しかし、新しいノードを作成していくつかのベースノードを作成するには、最善の方法がわかりません。

アイデア?

30
Nic Hubbard

DOMDocument は素晴らしい選択です。これは、XMLドキュメントを作成および操作するために特別に設計されたモジュールです。ドキュメントを最初から作成するか、既存のドキュメント(または文字列)を開いて、その構造をナビゲートおよび変更できます。

$xml = new DOMDocument();
$xml_album = $xml->createElement("Album");
$xml_track = $xml->createElement("Track");
$xml_album->appendChild( $xml_track );
$xml->appendChild( $xml_album );

$xml->save("/tmp/test.xml");

再度開いて書き込むには:

$xml = new DOMDocument();
$xml->load('/tmp/test.xml');
$nodes = $xml->getElementsByTagName('Album') ;
if ($nodes->length > 0) {
   //insert some stuff using appendChild()
}

//re-save
$xml->save("/tmp/test.xml");
63
zombat

PHPには XML操作 のライブラリがいくつかあります。

ドキュメントオブジェクトモデル (DOM)アプローチ(これはW3C標準であり、WebブラウザーやJavaなどの他の環境で使用したことがあればおなじみのはずです)。次のようにドキュメントを作成できます

<?php
    $doc = new DOMDocument( );
    $ele = $doc->createElement( 'Root' );
    $ele->nodeValue = 'Hello XML World';
    $doc->appendChild( $ele );
    $doc->save('MyXmlFile.xml');
?>

以前にDOMに出会ったことがなくても、このモデルは多くの言語/環境で使用されているため、DOMに時間をかける価値があります。

13
Robert Christie

FluidXML を使用すると、XMLドキュメントを非常に簡単に生成および保存できます。

$doc = fluidxml();

$doc->add('Album', true)
        ->add('Track', 'Track Title');

$doc->save('album.xml');

ファイルからドキュメントをロードするのも同様に簡単です。

$doc = fluidify('album.xml');

$doc->query('//Track')
        ->attr('id', 123);

https://github.com/servo-php/fluidxml

2
Daniele Orlando