Mailinglisten-Archive |
Hi, ich habe die content.xml Datei einer .odt Datei und möchte eine node duplizieren (eine komlpette Tabellenzeile, also die aktuelle node "table:table-row" mit all ihren childs "table:table-cell"). Ich schaffe es aber nur, die neue node, die ich per cloneNode erzeugt habe, mit appendChild an das Ende des xml-Files anzuhängen und nicht dahin wo sie hingehört (hinter eine bestimmte node mitten drin). $doc = new DOMDocument(); $doc->validateOnParse = true; $doc->load( $this->odt_xml_file ); $doc->normalize(); $nodeList = $doc->getElementsByTagName( 'table-row' ); for ( $i = 0; $i < $nodeList->length; $i++ ) { // hinter diese node soll genau diese dupliziert werden if ( strstr( $nodeList->item($i)->nodeValue, "{NO. RECEIPTS}" ) ) { $parent = $nodeList->item($i)->parentNode; echo "parent Node: " . $parent->nodeName . "<br />"; $actual = $nodeList->item($i); echo "aktuelle Node: " . $actual->nodeName . "<br />"; $clonenode = $nodeList->item($i)->cloneNode( true ); echo "Cloned Node Name: " . $clonenode->nodeName . "<br />"; } } if ( isset( $actual ) ) { // SO FUNKTIONIERT ES NICHT (node wird komplett überhaupt nicht eingehängt) $newnode = $actual->appendChild( $clonenode ); // SO FUNKTIONIERT ES, ABER NUR AM ENDE DES XML DOKUMENTS $newnode = $doc->appendChild( $clonenode ); echo "Appended Node: " . $newnode->nodeName; } $this->odt_xml_file_content = $doc->saveXML(); ergibt diese Ausgabe: parent Node: table:table aktuelle Node: table:table-row Cloned Node Name: table:table-row Appended Node: table:table-row Die geklonte node ist vollkommen korrekt, wird halt nur nicht an der richtigen Stelle eingehängt. Mit insertBefore hab ich auch schon experimentiert, aber damit hab ich es auch nicht hinbekommen. Gerade fällt mir auf, dass $actual->nodeName "table:table-row" ist, aber alle anderen row nodes auch, d.h. diese node hat keine spezielle Kennzeichnung oder id, womit dann klar wäre, wohin sie gehören würde. Kann mir da jemand nen Tipp geben? Andi
php::bar PHP Wiki - Listenarchive