Как динамически генерировать XML-файл с помощью PHP?

Я должен динамически генерировать xml-файл во время выполнения. Пожалуйста, помогите мне в создании ниже XML-файла динамически с помощью PHP.

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

Я бы использовал 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()); 

Чтобы создать XML-документ в PHP, вы должны указать класс DOMDocument, создать дочерние узлы и добавить эти узлы в правильную ветвь дерева документов.

Для справки вы можете прочитать http://it.php.net/manual/en/book.dom.php

Теперь мы кратко рассмотрим приведенный ниже код.

  • в строке 2 мы создаем пустой XML-документ (просто укажите xml-версию (1.0) и кодировку (utf8))
  • теперь нам нужно заполнить дерево xml:
    • Мы должны создать xmlnode (строка 5)
    • и мы должны добавить это в правильное положение. Мы создаем корень, поэтому добавляем его непосредственно к domdocument.
    • Обратите внимание, что элемент 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(); ?> 

Изменить: просто еще один намек: главное преимущество использования xmldocument (документа dom или одного простого) вместо печати xml заключается в том, что xmltree можно искать с помощью запроса xpath

простой способ сделать это:

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

С 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

Пожалуйста, используйте нижеприведенный фрагмент; он должен помочь вам сгенерировать желаемый результат:

 <?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 = $domtree->createElement("track"); $currentTrack = $xmlRoot->appendChild($currentTrack); $currentTrack->appendChild($domtree->createElement('path','song2.mp3')); $currentTrack->appendChild($domtree->createElement('title','title of song2.mp3')); $domtree->save("Track.xml"); ?> 

Взгляните на систему Tiny But Strong templating. Он обычно используется для шаблонирования HTML, но есть расширение, которое работает с XML-файлами. Я использую это для создания отчетов, в которых у меня может быть один файл кода и два файла шаблонов – htm и xml, и пользователь может затем выбрать, отправлять ли отчет на экран или электронную таблицу.

Еще одно преимущество заключается в том, что вам не нужно кодировать xml с нуля, в некоторых случаях я хочу экспортировать очень большие сложные электронные таблицы, и вместо того, чтобы кодировать весь экспорт, все, что требуется, – это сохранить существующую таблицу в xml и заменить в тегах кода, где требуется вывод данных. Это быстрый и эффективный способ работы.

 $query=mysql_query("select * from tablename")or die(mysql_error()); $xml="<libraray>\n\t\t"; while($data=mysql_fetch_array($query)) { $xml .="<mail_address>\n\t\t"; $xml .= "<id>".$data['id']."</id>\n\t\t"; $xml .= "<email>".$data['email_address']."</email>\n\t\t"; $xml .= "<verify_code>".$data['verify']."</verify_code>\n\t\t"; $xml .= "<status>".$data['status']."</status>\n\t\t"; $xml.="</mail_address>\n\t"; } $xml.="</libraray>\n\r"; $xmlobj=new SimpleXMLElement($xml); $xmlobj->asXML("text.xml"); в $query=mysql_query("select * from tablename")or die(mysql_error()); $xml="<libraray>\n\t\t"; while($data=mysql_fetch_array($query)) { $xml .="<mail_address>\n\t\t"; $xml .= "<id>".$data['id']."</id>\n\t\t"; $xml .= "<email>".$data['email_address']."</email>\n\t\t"; $xml .= "<verify_code>".$data['verify']."</verify_code>\n\t\t"; $xml .= "<status>".$data['status']."</status>\n\t\t"; $xml.="</mail_address>\n\t"; } $xml.="</libraray>\n\r"; $xmlobj=new SimpleXMLElement($xml); $xmlobj->asXML("text.xml"); 

Простое подключение с вашей базой данных приведет к созданию файла test.xml в папке проекта