web-dev-qa-db-fra.com

Comment générer un fichier XML de manière dynamique en utilisant PHP?

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>
216
musicking123

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());
347
Ivan Krechetov

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.

  • à la ligne 2, nous créons un document XML vide (spécifiez simplement la version XML (1.0) et l'encodage (utf8))
  • maintenant nous devons renseigner l’arbre xml:
    • Nous devons créer un xmlnode (ligne 5)
    • et nous devons annexer ceci dans la position correcte. Nous créons la racine, nous l'ajoutons donc directement au document domd.
    • Note create element ajoute l'élément au nœud et renvoie le nœud inséré. Nous enregistrons cette référence pour ajouter les nœuds de piste au nœud racine (appelé accessoirement xml).

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

173
Eineki

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

27
andyk

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"
        ]
    ]);

});

https://github.com/servo-php/fluidxml

15
Daniele Orlando

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.

4
Cruachan