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

    Proprietà 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 "

    $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

  2. #2
    Ciao.
    Posta il file xml.




    PS
    Consiglio fai il debug con la proprietà tagName
    per renderti conto di dove vai a parare
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3

    firstChild

    Ciao Wisher,
    grazie per l'aiuto. Ti incollo un estratto dell'xml:

    <?xml version="1.0" encoding="iso-8859-1"?>
    <cineteca>
    <movie>
    <titolo>Ace Ventura - L'acchiappanimali</titolo>
    <genere>
    <item>Demenziale</item>
    </genere>
    <origine>
    <paese>USA</paese>
    </origine>
    <anno>1994</anno>
    <cast>
    <attore>Jim Carrey</attore>
    </cast>
    </movie>
    <movie>
    <titolo>Ace Ventura - Missione Africa</titolo>
    <genere>
    <item>Demenziale</item>
    </genere>
    <origine>
    <paese>USA</paese>
    </origine>
    <anno>1995</anno>
    <cast>
    <attore>Jim Carrey</attore>
    </cast>
    </movie>
    ......
    </cineteca>

    Potresti spiegarmi come fare la procedura di debug? Ti ringrazio ancora, ciao.

  4. #4
    Questo è il metodo + veloce
    Codice PHP:
    $xml= new DOMDocument();
    $xml->load('movies.xml');
    $data= array();
    $movies$xml->getElementsByTagName("movie");
    foreach(
    $movies as $node){
        
    $data[][$node->tagName]= $node->nodeValue;
    }
    var_dump($data); 
    tagName e nodeType sono utili quando ti perdi
    nel tree DOM


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5

    Proprietà firstChild

    Ciao Whisher,
    grazie per lo script. Ho postato una discussione dal titolo "firstChild" contenente uno script
    che sembra risolvere il problema iniziale (in realtà non sarebbe dovuta essere una nuova
    discussione ma una risposta a questa solo che ho cliccato su nuovo anzichè su rispondi,
    vabbè).
    Grazie per il tuo aiuto, ciao.

  6. #6
    Questo è il metodo prolisso
    Codice PHP:
    $xml= new DOMDocument();
    $xml->load('movies.xml');
    $movies$xml->getElementsByTagName("movie");
    $data= array();
    for (
    $i 0$len$movies->length$i $len$i++){
        
    $children$movies->item($i)->childNodes;
        for(
    $y 0$y $children->length$y++){
            if(
    $children->item($y)->nodeType==XML_ELEMENT_NODE){
                
    $sub$children->item($y)->childNodes;
                for(
    $x 0$x $sub->length$x++){
                    if(
    $sub->item($x)->nodeType==XML_TEXT_NODE){
                        
    $data[][$children->item($y)->tagName]= $sub->item($x)->nodeValue;
                    }
                    elseif(
    $sub->item($x)->nodeType==XML_ELEMENT_NODE){
                        
    $data[][$sub->item($x)->tagName]=$sub->item($x)->firstChild->nodeValue;
                    }
                }
            }
        }
    }
    echo 
    "<pre>";
    print_r($data); 
    Prendilo come esempio didattico.
    ho letto l'altro thread e ti consiglio
    vivamente di leggerti una guida sul DOM
    dai un occhio qui è su js ma ci sono
    gli stessi metodi/proprietà delle DOM functions.




    PS.
    Se lo hai scritto tu cambia il file xml
    perchè è rindondante
    ie
    Codice PHP:
    <genere>
    <
    item>Demenziale</item>
    </
    genere
    lo trasformi in
    Codice PHP:
    <genere>Demenziale</genere
    in questo modo è molto +
    semplice il parsing.
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

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 © 2024 vBulletin Solutions, Inc. All rights reserved.