Как динамически генерировать 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>
Ответы
Ответ 1
Я бы использовал 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());
Ответ 2
Поскольку этот вопрос является домашним заданием, я думаю, вам следует избегать ярлыков в качестве систем шаблонов и вспомогательных классов, поскольку ваша область должна быть, чтобы научиться делать что-то, а не делать что-то.
Чтобы создать XML-документ в PHP, вы должны указать класс DOMDocument, создать дочерние узлы и добавить эти узлы в правильную ветвь дерева документов.
Для справки вы можете прочитать http://it.php.net/manual/en/book.dom.php
Теперь мы кратко рассмотрим приведенный ниже код.
- в строке 2 мы создаем пустой XML-документ
(просто укажите xml-версию (1.0) и кодировку (utf8))
- Теперь нам нужно заполнить дерево xml:
- Нам нужно создать xmlnode (строка 5)
- и мы должны добавить это в правильное положение. Мы создаем корень, поэтому добавляем его непосредственно к domdocument.
- Обратите внимание, что элемент create добавляет элемент в node и возвращает вставленный node, мы сохраняем эту ссылку для добавления узлов трека к корневому node (кстати, называемому xml).
Это основы, вы можете создать и добавить node только в строке (например, 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 dom one или simplexml one) вместо печати xml является то, что xmltree можно искать с помощью запроса xpath
Ответ 3
простой способ сделать это:
<?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
Ответ 4
С 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
Ответ 5
Пожалуйста, используйте нижеприведенный фрагмент; он должен помочь вам сгенерировать желаемый результат:
<?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");
?>
Ответ 6
Посмотрите на систему шаблонов Tiny But Strong. Он обычно используется для шаблонирования HTML, но есть расширение, которое работает с файлами XML. Я использую это для создания отчетов, где у меня может быть один файл кода и два файла шаблона - htm и xml, и пользователь может затем выбрать, отправлять ли отчет на экран или электронную таблицу.
Еще одно преимущество заключается в том, что вам не нужно кодировать xml с нуля, в некоторых случаях мне нужно экспортировать очень большие сложные электронные таблицы, и вместо того, чтобы кодировать весь экспорт, все, что требуется, - это сохранить существующую таблицу в xml и заменить в тегах кода, где требуется вывод данных. Это быстрый и эффективный способ работы.
Ответ 7
$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 в папке проекта