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