Je dois générer un fichier XML dynamiquement au moment de l'exécution. Aidez-moi à générer dynamiquement le fichier XML ci-dessous à l’aide de 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>
Je voudrais utiliser 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());
Pour créer un document XML dans PHP, vous devez créer une instance de la classe DOMDocument, créer des nœuds enfants et ajouter ces nœuds dans la branche appropriée de l'arborescence du document.
Pour référence, vous pouvez lire http://it.php.net/manual/en/book.dom.php
Maintenant, nous allons faire un tour rapide du code ci-dessous.
Ce sont les bases, vous pouvez créer et ajouter un noeud dans une seule ligne (13e, par exemple), vous pouvez faire beaucoup d'autres choses avec l'api dom. C'est comme tu veux.
<?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();
?>
Edit: Juste un autre indice: Le principal avantage de l’utilisation d’un document xmldocument (celui de dom ou celui de simplexml) au lieu d’imprimer le fichier xml, c’est que xmltree est consultable avec une requête xpath
un moyen facile de le faire est:
<?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>';
?>
enregistrez-le au format .php
Avec FluidXML , vous pouvez générer votre XML très facilement.
$tracks = fluidxml('xml');
$tracks->times(8, function ($i) {
$this->add([
'track' => [
'path' => "song{$i}.mp3",
'title' => "Track {$i} - Track Title"
]
]);
});
Jetez un coup d'œil au système minuscule mais puissant . Il est généralement utilisé pour les modèles HTML, mais il existe une extension qui fonctionne avec les fichiers XML. J'utilise beaucoup cette méthode pour créer des rapports dans lesquels je peux avoir un fichier de code et deux fichiers de modèle - htm et xml - et où l'utilisateur peut ensuite choisir d'envoyer un rapport à l'écran ou dans un tableur.
Un autre avantage est que vous n'avez pas à coder le code XML à partir de rien, dans certains cas, je voulais exporter des feuilles de calcul complexes très volumineuses, et au lieu d'avoir à coder toutes les exportations, il suffit de sauvegarder une feuille de calcul existante. XML et substituer dans les balises de code où la sortie de données est requise. C'est un moyen rapide et très efficace de travailler.