phpbar.de logo

Mailinglisten-Archive

[php] DOM appendChild

[php] DOM appendChild

Andi Voss andi at andis.mine.nu
Fre Mar 23 22:42:56 CET 2007


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