PHP, DOM, appendChild()

Hallo!
Gegeben: Zwei DomDocument-Objekte;
Gesucht: Wie kann ich ein DomElement-Objekt eines DomDocument-Objektes an ein
DomElement-Objekt eines anderen DomDocument-Objektes anhängen?

Versuchter Lösungsweg:
$domData1 = new DomDocument();
$domData1->load(‚test.xml‘);
$domData2 = new DomDocument();
$domData2->load(‚test2.xml‘);
echo $domData1->childNodes->item(0)->nodeName;
echo $domData2->childNodes->item(0)->nodeName;
$domData1->childNodes->item(0)->appendChild($domData2->childNodes->item(0));

Ich nehme an, dass dieser Lösungsweg deshalb nicht funktioniert, weil die
Methode appendChild nur z.B. DomElement-Objekte eines DomDocument-Objekts an
ein DomElement-Objekt desselben DomDocument-Objekts anhängen kann?

Schöne Grüße,
Christian

Hallo Christian,

ich kann zwar kein PHP, aber unter c# mach ich soetwas auch, aber:

Append hängt mE einen Knoten innerhalb des DOC unter einen benannten Knoten. In deinem Fall ist der Knoten nocht nicht „da“.

c# kennt .ImportNode. Aus der Hilfe:

Die ImportNode-Methode ist das Verfahren, mit dem Sie einen Knoten
oder eine ganze Knotenteilstruktur von einem XmlDocument in ein 
anderes kopieren können. Der Knoten, der von dem Aufruf zurückgegeben 
wird, ist eine Kopie des Knotens aus dem Quelldokument, einschließlich 
Attributwerten, Knotennamen, Knotentyp und allen namespacebezogenen 
Attributen wie Präfix, lokaler Name und Namespace-URI (Uniform 
Resource Identifier). Das Quelldokument bleibt dabei unverändert. 
Nachdem Sie den Knoten importiert haben, müssen Sie ihn noch der 
Struktur hinzufügen, indem Sie eine der Methoden zum Einfügen von 
Knoten verwenden.


Sobald der Knoten an das neue Dokument angehängt worden ist, ist das 
neue Dokument Eigentümer des Knotens. Grund hierfür ist, dass jeder 
Knoten, wenn er erstellt wird, zu einem Dokument gehört, das sein 
Eigentümer ist. Dies ist auch der Fall, wenn die Knoten in 
unterschiedlichen Dokumentfragmenten erstellt werden. Dies ist eine 
DOM-spezifische Bedingung, die durch den Factoryerstellungsentwurf für 
die XmlDocument-Klasse durchgesetzt wird. So stellt z. B. 
CreateElement die einzige Möglichkeit zum Erstellen neuer Knoten dar.

Falls PHP eine solche Methode nicht kennt, must du im Zieldokument einen Knoten erzeugen, diesem dann seine Inhalte einbauen (Kennt PHP innerXml?) und den neuen Knoten per Append an die richtige Stelle bringen.

mfg

Dirk.Pegasus

PHP, DOM, importNode()
Hallo Dirk!
Danke für deine hilfreiche Antwort!
PHP kennt die DOM-Methode importNode(). Bei meinem Programmbeispiel muss ich
einfach nur vor Aufruf der Methode appendChild() diese Methode für mein
DomDocument aufrufen. (Soweit ich in einer Dom-Dokumentation (php.net)
nachgelesen habe, gibt es für DOM in PHP keine innerXML-Methode.)
Schöne Grüße und nochmals herzlichen Dank,
Christian