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