Hinzufügen eines Blocks von XML als Kind eines SimpleXMLElement Objekt
Frage
Ich habe dieses SimpleXMLElement Objekt mit einer XML-Einrichtung ähnlich den folgenden ...
$xml = <<<EOX
<books>
<book>
<name>ABCD</name>
</book>
</books>
EOX;
$sx = new SimpleXMLElement( $xml );
Jetzt habe ich eine Klasse mit dem Namen Buch, das Information enthält. zu jedem Buch. Die gleiche Klasse kann auch das Buch Informationen ausspucken. im XML-Format verwendet, die den oben (der verschachtelte Block) .. Beispiel:
$book = new Book( 'EFGH' );
$book->genXML();
... will generate
<book>
<name>EFGH</name>
</book>
Nun, durch die einen Weg, um herauszufinden, ich versuche ich diesen XML-Block erzeugte verwenden kann, und fügen Sie als Kind so, dass es jetzt wie ... zum Beispiel sieht ..
// Non-existent member method. For illustration purposes only.
$sx->addXMLChild( $book->genXML() );
...XML tree now looks like:
<books>
<book>
<name>ABCD</name>
</book>
<book>
<name>EFGH</name>
</book>
</books>
Aus welcher Dokumentation ich habe auf SimpleXMLElement lesen, addChild () nicht, dies für Sie erledigen, da es keine XML-Daten als Variablenwert unterstützen.
Lösung
Zwei Lösungen. Erstens, Sie tun es mit Hilfe von libxml / DOMDocument / SimpleXML: Sie $sx
Objekt importieren müssen DOM , eine DOMDocumentFragment
erstellen und verwenden DOMDocumentFragment::appendXML()
$doc = dom_import_simplexml($sx)->ownerDocument;
$fragment = $doc->createDocumentFragment();
$fragment->appendXML($book->genXML());
$doc->documentElement->appendChild($fragment);
// your original $sx is now already modified.
Siehe Online Demo .
Sie können auch von SimpleXMLElement erweitern und eine Methode hinzufügen, die diese zur Verfügung stellt. Dieses spezielle Objekt verwenden, dann würde es ermöglichen Ihnen folgende leicht zu erstellen:
$sx = new MySimpleXMLElement($xml);
$sx->addXML($book->genXML());
Eine andere Lösung ist eine XML-Bibliothek zu verwenden, die bereits über diese Funktion verfügt eingebaute in wie SimpleDOM . Sie greifen SimpleDOM und Sie InsertXML (), die wie die addXMLChild () Methode funktioniert, wie Sie wurden zu beschreiben.
include 'SimpleDOM.php';
$books = simpledom_load_string(
'<books>
<book>
<name>ABCD</name>
</book>
</books>'
);
$books->insertXML(
'<book>
<name>EFGH</name>
</book>'
);
Andere Tipps
Haben Sie einen Blick auf meinem Code:
$doc = new DOMDocument();
$doc->loadXML("<root/>");
$fragment = $doc->createDocumentFragment();
$fragment->appendXML("<foo>text</foo><bar>text2</bar>");
$doc->documentElement->appendChild($fragment);
echo $doc->saveXML();
Dies ändert das XML-Dokument durch ein XML-Fragment hinzugefügt wird. Online Demo .