web-dev-qa-db-ja.com

PHPを使用してXMLファイルを動的に生成する方法

実行時に動的にxmlファイルを生成する必要があります。 PHPを使用して動的に以下のXMLファイルを生成するのを手伝ってください。

<?xml version="1.0" encoding="UTF-8"?>
<xml>
 <track>
     <path>song1.mp3</path>
     <title>Track 1 - Track Title</title>
 </track>
 <track>
     <path>song2.mp3</path>
     <title>Track 2 - Track Title</title>
 </track>
 <track>
     <path>song3.mp3</path>
     <title>Track 3 - Track Title</title>
 </track>
 <track>
     <path>song4.mp3</path>
     <title>Track 4 - Track Title</title>
 </track>
 <track>
     <path>song5.mp3</path>
     <title>Track 5 - Track Title</title>
 </track>
 <track>
     <path>song6.mp3</path>
     <title>Track 6 - Track Title</title>
 </track>
 <track>
     <path>song7.mp3</path>
     <title>Track 7 - Track Title</title>
 </track>
 <track>
     <path>song8.mp3</path>
     <title>Track 8 - Track Title</title>
 </track>
214
musicking123

SimpleXMLElement を使用します。

<?php

$xml = new SimpleXMLElement('<xml/>');

for ($i = 1; $i <= 8; ++$i) {
    $track = $xml->addChild('track');
    $track->addChild('path', "song$i.mp3");
    $track->addChild('title', "Track $i - Track Title");
}

Header('Content-type: text/xml');
print($xml->asXML());
344
Ivan Krechetov

PHPにXMLドキュメントを作成するには、DOMDocumentクラスをインスタンス化し、子ノードを作成し、それらのノードをドキュメントツリーの正しいブランチに追加する必要があります。

参考のためにあなたは読むことができます http://it.php.net/manual/en/book.dom.php

それでは、以下のコードを簡単に見ていきます。

  • 2行目で、空のXMLドキュメントを作成します(単にXMLバージョン(1.0)とエンコード(utf8)を指定します)。
  • 今、私たちはxmlツリーを生成する必要があります:
    • Xmlnodeを作成する必要があります(5行目)
    • そしてこれを正しい位置に追加しなければなりません。ルートを作成しているので、これをドキュメントに直接追加します。
    • Create要素は要素をノードに追加し、挿入されたノードを返します。この参照を保存してトラックノードをルートノードに追加します(偶然xmlと呼ばれます)。

これらは基本です、あなたはたった一行でノードを作成して追加することができます(例えば13日)、あなたはdom apiで他の多くのことをすることができます。それはあなた次第です。

<?php    
    /* create a dom document with encoding utf8 */
    $domtree = new DOMDocument('1.0', 'UTF-8');

    /* create the root element of the xml tree */
    $xmlRoot = $domtree->createElement("xml");
    /* append it to the document created */
    $xmlRoot = $domtree->appendChild($xmlRoot);

    $currentTrack = $domtree->createElement("track");
    $currentTrack = $xmlRoot->appendChild($currentTrack);

    /* you should enclose the following two lines in a cicle */
    $currentTrack->appendChild($domtree->createElement('path','song1.mp3'));
    $currentTrack->appendChild($domtree->createElement('title','title of song1.mp3'));

    $currentTrack->appendChild($domtree->createElement('path','song2.mp3'));
    $currentTrack->appendChild($domtree->createElement('title','title of song2.mp3'));

    /* get the xml printed */
    echo $domtree->saveXML();
?>

編集:もう1つのヒント:xmlを印刷する代わりにxmldocument(dom document oneまたはsimplexml one)を使用する主な利点は、xmltreeがxpath queryで検索できることです。

172
Eineki

これを簡単に行う方法は以下のとおりです。

<?php
// Send the headers
header('Content-type: text/xml');
header('Pragma: public');
header('Cache-control: private');
header('Expires: -1');
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";

echo '<xml>';

// echo some dynamically generated content here
/*
<track>
    <path>song_path</path>
    <title>track_number - track_title</title>
</track>
*/

echo '</xml>';

?>

.phpとして保存してください

27
andyk

FluidXML を使用すると、XMLを非常に簡単に生成できます。

$tracks = fluidxml('xml');

$tracks->times(8, function ($i) {
    $this->add([
        'track' => [
            'path'  => "song{$i}.mp3",
            'title' => "Track {$i} - Track Title"
        ]
    ]);

});

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

15
Daniele Orlando

Tiny But Strong テンプレートシステムを見てください。これは一般にHTMLのテンプレート作成に使用されますが、XMLファイルで機能する拡張子があります。 1つのコードファイルと2つのテンプレートファイル(htmとxml)を持つことができるレポートを作成するためにこれを広く使用し、その後ユーザーはレポートをスクリーンまたはスプレッドシートのどちらに送信するかを選択できます。

もう1つの利点は、xmlを最初からコーディングする必要がないことです。場合によっては、非常に大規模で複雑なスプレッドシートをエクスポートしたい場合があります。データの出力が必要な場合は、xmlを使用してコードタグに置き換えます。それは速くて非常に効率的な作業方法です。

3
Cruachan