2 Stimmen

Gibt es eine Möglichkeit, ein PHP SimpleXMLElement zu einem anderen SimpleXMLElement hinzuzufügen?

Die "addChild"-Methode von SimpleXMLElement scheint die richtige Wahl zu sein, aber sie nimmt anscheinend nur Zeichenketten entgegen, die den Tag-Namen des neuen Elements darstellen.

Es gibt die objektähnliche Notation, um Knoten des Baums zu referenzieren und sie zu setzen, z.B. $simpleXMLNode->child = value, aber das scheint nur für einfache Text-/Numerikwerte zu funktionieren. Wenn ich das Folgende versuche:

$s = new SimpleXMLElement('<root/>');
$t = new SimpleXMLElement('<child/>');
$s->a = $t;
echo $s->asXML()

Ich verstehe:

<?xml version="1.0"?>
<root><a></a></root>

als ich gehofft hatte:

<?xml version="1.0"?>
<root><a><child/></a></root>

Ich dachte daran, $t in eine Zeichenkette umzuwandeln und sie dann hinzuzufügen (nachdem ich die XML-Deklaration entfernt habe):

$s->a = substr($t->asXML(),22)

Aber das ergibt sich:

<?xml version="1.0"?>
<root><a>&lt;child/&gt;</a></root>

Wiederum nicht das, was ich mir erhofft hatte.

Gibt es einen typischen Weg, um diese Art von Dingen mit SimpleXML zu erreichen?

7voto

hobodave Punkte 28128

Hallo Unbekannter. Sie müssen die DOMElement-Schnittstelle für Ihre SimpleXML-Objekte verwenden, um dies zu erreichen.

<?php

$s = new SimpleXMLElement('<root/>');
$t = new DOMElement('child');

$dom = dom_import_simplexml($s);
$dom->appendChild($t);

echo $s->asXML();
// <root><child/></root>

Wenn Sie genauere Angaben benötigen, lassen Sie es mich wissen. In der Dokumentation und den Kommentaren zur dom_import_simplexml()-Methode finden sich ebenfalls mehrere Beispiele: http://php.net/dom_import_simplexml

1voto

null Punkte 7142

Ich bin nicht sicher, ob das hilft, aber Sie könnten auch SimpleXML so erweitern, dass es so funktioniert, wie Sie es erwarten. Hier ist ein Projekt, an dem ich gearbeitet habe für bBibliothek Xml Klasse. Sie können sie betrachten, um SimpleXml so anzupassen, dass es so funktioniert, wie Sie es erwarten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X