it-swarm.com.de

Verwenden von SimpleXML zum Erstellen eines XML-Objekts von Grund auf neu

Ist es möglich, mit den SimpleXML-Funktionen von PHP ein XML-Objekt von Grund auf neu zu erstellen? Wenn Sie die Funktionsliste durchsehen, gibt es Möglichkeiten, eine vorhandene XML-Zeichenfolge in ein Objekt zu importieren, das Sie dann bearbeiten können. Wenn Sie jedoch ein XML-Objekt nur programmgesteuert von Grund auf neu generieren möchten, wie können Sie dies am besten tun?

Ich habe herausgefunden, dass Sie simplexml_load_string () verwenden und den gewünschten Root-String übergeben können, und dann haben Sie ein Objekt, das Sie durch Hinzufügen von Kindern manipulieren können ... obwohl dies eine Art Hack zu sein scheint, da ich muss Codieren Sie tatsächlich XML-Code in den String, bevor er geladen werden kann.

Ich habe es mit den DOMDocument-Funktionen gemacht, obwohl es ein wenig verwirrend ist, weil ich nicht sicher bin, was das DOM mit der Erstellung eines reinen XML-Dokuments zu tun hat ... also ist es vielleicht nur falsch benannt: -)

73
dirtside

Sicher kannst du. Z.B.

<?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();
?>

Ausgabe

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

Habe Spaß.

135
DreamWerx

In PHP5 sollten Sie stattdessen die Klasse Document Object Model verwenden. Beispiel:

$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

Bitte sehen Sie meine Antwort hier . Wie dreamwerx.myopenid.com betont, ist dies mit SimpleXML möglich, aber die DOM-Erweiterung wäre die bessere und flexiblere Weg. Zusätzlich gibt es eine dritte Möglichkeit: Verwenden von XMLWriter . Es ist viel einfacher zu bedienen als das DOM und daher meine bevorzugte Methode, XML-Dokumente von Grund auf neu zu schreiben.

$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));

Übrigens: DOM steht für [~ # ~] d [~ # ~] ocument [~ # ~] o [~ # ~] bject [~ # ~] m [ ~ # ~] odel; Dies ist die standardisierte API für XML-Dokumente.

16
Stefan Gehrig