Я должен динамически генерировать 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
Теперь мы кратко рассмотрим приведенный ниже код.
Это основы, вы можете создавать и добавлять узел только в одной строке (например, 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" ] ]); });
Пожалуйста, используйте нижеприведенный фрагмент; он должен помочь вам сгенерировать желаемый результат:
<?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 в папке проекта