Probleme mit cloneNode und erstellen eines neuen DOMDocuments

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit cloneNode und erstellen eines neuen DOMDocuments

    schönen Samstag,

    ich ärgere mich gerade mit dem problem rum das ich einen knoten clobnen möchte um diesen in eine neues doc zu integrieren folgender code

    PHP-Code:
    // test daten
    $xml = '<?xml version="1.0" encoding="UTF-8" ?>
    <data>
        <child>
            <title>Title 1</title>
        </child>
        <child>
            <title>Title 1</title>
        </child>
    </data>
    ';

    // debug function
    function printRF( $o ) {
        echo '<pre>';
        print_r( $o );
        echo '</pre>';
    }

    // debug function
    function trace( $o ) {
        if( is_array( $o ) || is_object( $o ) ) {
            return printRF( $o );
        }
        echo $o.'<br />';
    }

    // basis xml doc
    $x = new DOMDocument();
    $x->preserveWhiteSpace = false;
    $x->loadXML( $xml );
    $x->formatOutput = true;
    $fc = $x->firstChild;

    $c = 0;
    while( $node = $fc->childNodes->item( $c++ ) ) {
        parseNode( $node );    
    }

    function parseNode( $node ) {
        $n = $node->cloneNode( true );
        try {
            $x = new DOMDocument( '1.0', 'UTF-8' );
            $x->preserveWhiteSpace = false;
            $rootNode = $x->createElement( 'data' );
            $x->appendChild( $rootNode );        
            $x->firstChild->appendChild( $n );
        } catch( DOMException  $e ) {
            trace( $e );
        }
    }
    nun schmeißt er mir immer ne Exception von wegen

    Wrong Document Error

    in der zeile
    $x->appendChild( $n );

    wo ich den geklonten knoten neu hinzufügen will.

    WARUM ???

    mfg
    alex

  • #2
    teste mal, ob $n und $x->firstChild beide domnode sind.

    Kommentar


    • #3
      Ich habs mittlerweile rausgefunden woran es liegt.
      mit der cloneNode methode kann man nur knoten inerhalb eines
      doc´s kopieren.

      für das kopieren von einem doc in ein neues muß man
      importNode machen. das sieht dann so aus

      PHP-Code:
      function parseNode$node ) {
          try {
              
      $x = new DOMDocument'1.0''UTF-8' );
              
      $x->preserveWhiteSpace false;
              
      // anstatt cloneNode() nehme man importNode um den 
              // knoten aus einem anderen xml Doc zu clonen
              
      $n $x->importNode$nodetrue );
              
      $rootNode $x->createElement'data' );
              
      $x->appendChild$rootNode );        
              
      $x->firstChild->appendChild$n );         
          } catch( 
      DOMException  $e ) {
              
      trace$e );
          }

      was ja mal total verwirrebnd ist. Warum bleibt der geklonte knoten an das xmlDoc gebunden ???? ist mir ja mal völligst neu.

      aber so funktioniert es nun.

      besten dank

      mfg
      alex

      Kommentar

      Lädt...
      X