• User

    Prprietà firstChild dei DomNode nella libreria DOM

    Ciao a tutti,
    sto utilizzando la libreria DOM di php per manipolare i documenti xml ma ho
    un problema con la proprietà firstChild degli oggetti DOMNode che non
    riesco a risolvere. Vorrei pertanto chiedervi una mano. Vi riporto subito il
    codice e poi siego il problema:

    <?php
    $xml=new DOMDocument();
    $xml->load('movies.xml');

     $movies=$xml->getElementsByTagName("movie");
    
     for ($i = 0; $i < $movies->length; $i++)
     {
       $m=$movies->item($i);
       $t=$m->firstChild->nodeValue;
       echo "<p>$t</p>\n";
     }
    

    ?>

    Questo script apre il documento movies.xml (un elenco di film), preleva
    tutti gli elementi "movie" e dovrebbe visualizzare i titoli di tutti i film
    accedendo al primo figlio di ogni film (che è il titolo appunto).
    Il problema è che il browser non si degna di visualizzare niente di niente,
    nessun testo, nessun errore. Ho anche provato a copiare la lista dei film
    restituita da getElementsByTagName in un array vero e proprio ma non è
    cambiato niente. Non so più cosa inventarmi.
    Vi ringrazio per l'aiuto, ciao


  • User Attivo

    Leggi questo thread e vedi se può tornare utile al tuo scopo.

    http://www.giorgiotave.it/forum/php-mysql/58651-pillola-leggere-il-contenuto-di-un-file-xml.html

    Ciao!


  • User

    Grazie Sups, posso provare a usare la funzione childNodes sui vari film e a prelevare il primo elemento della lista restituita.
    Grazie ancora, ciao.


  • User

    Ciao Sups,

    ti sarò grato finchè campo! In questo modo riesco finalmente a estrarre tutti i
    titoli dei film:

    <?php
    $xml=new DOMDocument();
    $xml->load('disordinato.xml');

    $movies=$xml->getElementsByTagName("movie");

    for($i=0; $i<$movies->length; $i++)
    {
    $m = $movies->item($i);
    $figli_m = $m->childNodes;
    $t = $figli_m->item(1)->nodeValue;

     echo "<p>$t</p>\n";                         
    

    }
    ?>

    Inizialmente la terza istruzione del ciclo era: $t = $figli_m->item(0)->nodeValue;
    ma non visualizzava nulla come prima perciò ho chiesto l'item successivo ed ecco
    che sono saltati fuori i titoli dei film. A questo punto credo che chiedere l'item
    di indice 0 o il primo figlio con firstChild sia la stessa cosa ma non ho idea di cosa
    sia esattamente restituito. La descrizione di firstChild su php.net è "the first child
    of this node", vai a sapere.
    Grazie ancora, mitico, ciao.