simplexml tags kopieren

Sixty

Mitglied
Hi,

vielleicht kann mir jemand helfen? Ich habe zwei verschiedene XML-Dateien mit dem Knoten "layout").

1. Datei:

Code:
[...]<layout>
<color_head>#FFFFFF</color_head>
<color_body>#FFFFFF</color_body>
<color_sample>#FFFFFF</color_sample>
<color_font_head>#000000</color_font_head>
</layout>[...]

2. Datei:

Code:
[...]<layout>
<color_head>#000000</color_head>
<color_body>#000000</color_body>
</layout>[...]

Ich möchte jetzt den layout-Knoten der 1. Datei mit dem layout-Knoten der 2. Datei austauschen.

Mein bisheriges Vorgehen:

Code:
$xml_1 = simplexml_load_file('protocol.xml');
 $xml_2 = simplexml_load_file('protocol_2.xml');
 
 $var_versions_1 = $xml_1->layout;  
 $var_versions_2 = $xml_2->layout->children(); 
 
 $var_versions_1 = $var_versions_2;

 $xml_1->addChild('layout', $var_versions_2);
  
 $xml_1->asXML('protocol.xml');

Inhalte auslesen und ersetzen ist kein Problem nur ich will die kompletten Knoten.
 
Moin,

ich würde zwar nicht mit 100%iger Sicherheit darauf pochen, aber ich befürchte, dies geht mit simpleXML nicht.

Es bietet zum Kopieren von Knoten nicht das nötige Handwerkszeug, das da wäre:
  • importNode()
    man kann Knoten nicht ohne weiteres zwischen 2 XML-Dokumenten umherschieben, sie müssen zuvor importiert werden
  • cloneNode()
    ...dürfte klar sein

...du müsstest dort mit dem DOM arbeiten, das hält alles nötige bereit.
 
Dein Problem ist das SimpleXML mit "addChild" strins als parameter erwartet. Du kannst nicht einfach komplette Bäume so hinzufügen so. Du müsstest mit foreach den alten Baum durchgehen und jedes einzelne Unterelement hinzufügen. Das würde funktionieren und wird in den kommentaren auf php.net auch empfolen.
 
Zurück