web-dev-qa-db-fra.com

Utiliser 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 rien? En parcourant la liste des fonctions, il existe des moyens 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, quel est le meilleur moyen de le faire?

J'ai compris que vous pouvez utiliser simplexml_load_string () et transmettre la chaîne racine souhaitée, puis vous avez un objet que vous pouvez manipuler en ajoutant des enfants ... bien que cela ressemble à une sorte de hack, car je dois Effectuez un code XML dans la chaîne avant de pouvoir le charger.

Je l'ai fait en utilisant fonctions DOMDocument , même si c'est un peu déroutant car je ne suis pas sûr du rapport entre le DOM et la création d'un document XML pur ... alors c'est peut-être mal nommé: -)

73
dirtside

Sûr que vous pouvez. Par exemple.

<?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>

S'amuser.

135
DreamWerx

En PHP5, vous devriez plutôt utiliser la classe Document Object Model . 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());
21
PhiLho

S'il vous plaît voir ma réponse ici . Comme dreamwerx.myopenid.com indique, il est possible de le faire avec SimpleXML , mais le extension DOM serait préférable et plus flexible. façon. De plus, il existe une troisième méthode: utiliser XMLWriter . C'est beaucoup plus simple à utiliser que le DOM et c'est donc ma manière préférée d'écrire des documents XML à partir de zéro.

$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 [~ # ~] Document [~ # ~] o [~ # ~] bject [~ # ~] m [ ~ # ~] odel; c'est l'API normalisée en documents XML.

16
Stefan Gehrig