Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [PHP] appendere nodo DOM ad oggetto di un'altra classe

    Ho provato ad appendere un nodo DOM restituito da un metodo di una classe ad un altro nodo generato da un'altra classe, e ottengo sempre lo stesso errore.

    Dipende forse dal fatto che i nodi DOM non hanno senso svincolati dal DOMdocument su cui vengono creati?

    Riporto un caso semplificativo:

    Codice PHP:

    class body {
        private 
    $body;
        
        public function 
    __construct() { // crea l'oggetto body;
            
    $doc = new DOMdocument();
            
    $body $doc->createElement("body");
            
    $div $doc->createElement("div");
            
    $doc->appendChild($body);
            
    $div->appendChild($doc->createTextNode("Io sono il div."));
            
    $body->appendChild($div);
            
    $this->body $body;
        }
        public function 
    getBody() { // restituisce il body creato come oggetto DOM;
            
    return $this->body;
        }
        public function 
    append($node) { // appende un nodo al body creato:
            
    $body $this->body;
            
    $body->appendChild($node);
        }
    }

    class 
    paragraph {
        private 
    $par;
        
        public function 
    __construct() { // crea l'oggetto p;
            
    $doc = new DOMdocument();
            
    $par $doc->createElement("p");
            
    $par->appendChild($doc->createTextNode("Io sono il paragrafo."));
            
    $doc->appendChild($par);
            
    $this->par $par;
        }
        public function 
    getParagraph() { // restituisce il paragrafo creato come oggetto DOM;
            
    return $this->par;
        }
    }

    //creo l'elemento body:
    $b = new body();
    // creo l'elemento p
    $p = new paragraph();

    // appendo l'elemento all'elemento body, qui da errore:
    $b->append($p->getParagraph()); 
    Da cosa dipende l'errato append?
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  2. #2
    Ho risolto, il principio di base è l'importazione di nodi, che con PHP 4 venivano clonati.
    Con PHP 5 invece c'è il metodo importNode.

    Posto il principio di base se dovesse servire a qualcuno:

    Codice PHP:

    <?php

    $XML 
    '<?xml version="1.0"?>
    <books>
        <item>First book</item>
        <item>Second book</item>
        <code>23</code>
        <company>Michela</company>
    </books>'
    ;

    $doc1 = new DOMdocument;
    $doc1->loadXML($XML);
    $item $doc1->getElementsByTagName("item")->item(0);

    $doc2 = new DOMdocument;
    // true: import all nodes with childrens; false: only the specified node;
    $importedElement $doc2->importNode($itemtrue);

    $doc2->appendChild($importedElement);
    $output $doc2->saveXML($doc2);
    echo 
    "[b]DOMDocument->importNode example[/b]
    "
    ;


    echo 
    "Primo documento: 
    "
    .htmlentities($doc1->saveXML($doc1))."<hr />";
    echo 
    "Secondo documento con importazione di alcuni elementi del primo:
    "
    .htmlentities($doc2->saveXML($doc2))."<hr />";

    ?>
    La stessa soluzione, inserita nella classe, risolve il mio problema.

    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.