73 votes

Utilisation de SimpleXML pour créer un objet XML à partir de rien

Est-il possible d'utiliser les fonctions SimpleXML de PHP pour créer un objet XML à partir de zéro ? En regardant la liste des fonctions, il y a moyen d'importer une chaîne XML existante dans un objet que vous pouvez ensuite manipuler, mais si je veux simplement générer un objet XML par programme à partir de zéro, quelle est la meilleure façon de le faire ?

J'ai découvert que l'on peut utiliser simplexml_load_string() et passer la chaîne Root que l'on veut, et on obtient alors un objet que l'on peut manipuler en ajoutant des enfants... bien que cela semble être une sorte de hack, puisque je dois coder en dur du XML dans la chaîne avant de pouvoir la charger.

Je l'ai fait en utilisant le Fonctions DOMDocument Je ne sais pas trop ce que le DOM a à voir avec la création d'un document XML pur... alors peut-être que le nom est mal choisi :-)

137voto

DreamWerx Points 1857

Bien sûr que vous pouvez. Eg.

<?php
$newsXML = new SimpleXMLElement("<news></news>");
$newsXML->addAttribute('newsPagePrefix', 'value goes here');
$newsIntro = $newsXML->addChild('content');
$newsIntro->addAttribute('type', 'latest');
Header('Content-type: text/xml');
echo $newsXML->asXML();
?>

Sortie

<?xml version="1.0"?>
<news newsPagePrefix="value goes here">
    <content type="latest"/>
</news>

Amusez-vous bien.

21voto

PhiLho Points 23458

En PHP5, vous devez utiliser l'option Modèle d'objet de document à la place. Exemple :

$domDoc = new DOMDocument;
$rootElt = $domDoc->createElement('root');
$rootNode = $domDoc->appendChild($rootElt);

$subElt = $domDoc->createElement('foo');
    $attr = $domDoc->createAttribute('ah');
    $attrVal = $domDoc->createTextNode('OK');
    $attr->appendChild($attrVal);
    $subElt->appendChild($attr);
$subNode = $rootNode->appendChild($subElt);

$textNode = $domDoc->createTextNode('Wow, it works!');
$subNode->appendChild($textNode);

echo htmlentities($domDoc->saveXML());

16voto

Stefan Gehrig Points 47227

Veuillez voir ma réponse ici . Comme dreamwerx.myopenid.com fait remarquer qu'il est possible de le faire avec SimpleXML mais le Extension du DOM serait la meilleure solution et la plus souple. En outre, il existe une troisième solution : l'utilisation de l'option XMLWriter . C'est beaucoup plus simple à utiliser que le DOM et c'est donc ma méthode préférée pour écrire des documents XML à partir de rien.

$w=new XMLWriter();
$w->openMemory();
$w->startDocument('1.0','UTF-8');
$w->startElement("root");
    $w->writeAttribute("ah", "OK");
    $w->text('Wow, it works!');
$w->endElement();
echo htmlentities($w->outputMemory(true));

Au fait : DOM signifie D ocument O bjet M odel ; il s'agit de l'API normalisée en documents XML.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X