如何使用PHPdynamic生成XML文件?

我必须在运行时dynamic生成一个XML文件。 请帮助我使用PHPdynamic生成以下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> 

我会使用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()); 

由于这个问题是一个作业,我认为你应该避免使用快捷方式,因为作为范围的模板系统和辅助类应该是学习如何做事,而不是完成任务。

要在PHP中创buildXMLdocument,您应该实例化一个DOMDocument类,创build子节点并将这些节点追加到文档树的正确分支中。

作为参考,你可以阅读http://it.php.net/manual/en/book.dom.php

现在我们将快速浏览下面的代码。

  • 在第2行我们创build了一个空的xml文档(只需指定xml版本(1.0)和编码(utf8))
  • 现在我们需要填充xml树:
    • 我们必须创build一个xmlnode(第5行)
    • 我们必须在正确的位置附加这个。 我们正在创build根,所以我们直接将其附加到文档。
    • 注意create元素将元素追加到节点并返回插入的节点,我们保存这个引用以将追踪节点追加到根节点(顺便称为xml)。

这些是基础知识,你可以创build一个节点并添加一行(例如,第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文档之一或simplexml之一),而不是打印xml的主要优点是xmltree是可searchxpath查询

一个简单的方法来做到这一点是:

 <?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模板系统。 它通常用于模板化HTML,但有一个与XML文件一起使用的扩展。 我广泛使用它来创build报告,我可以有一个代码文件和两个模板文件 – htm和xml – 然后用户可以select是否将报告发送到屏幕或电子表格。

另一个好处是你不必从头开始编写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"); 

它的简单就是连接你的数据库,它会在你的项目文件夹中创buildtest.xml文件