Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    11

    Javascript e lettura dati XML

    Ciao a tutti!

    Dopo molto tempo sono tornato a smanettare e purtroppo mi si è accumulata un pò troppa ruggine...
    Attualmente ho un problema che mi attenaglia da qualche giorno, ho la necessità di estrapolare dei dati da un file XML usando Javascript e ho trovato un esempio in rete ma non riesco a farlo funzionare, di seguito i codici:

    index.html
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
        <head>
            <title>TABLE e XML con DOM</title>
            <script language="javascript" type="text/javascript">
                /**
                 * Script Javascript per la popolazione di una Tabella HTML
                 * attraverso documento XML e funzioni DOM
    
    
                // Funzione per il caricamento del documento XML e passaggio alla funzione per la gestione dei risultati ottenuti
                function loadXML(url, handler) {
                    /*
                     * url = posizione del file XML da caricare
                     * handler = nome della funzione da richiamare a caricamento documento XML eseguito
                     */
    
    
                    // Determino se l'implementazione DOM Level 2 e' supportata
                    if ( document.implementation && document.implementation.createDocument ) {
                        // Creo il nuovo oggetto XML
                        var xml = document.implementation.createDocument("", "", null);
                        // Imposto l'evento onload del documento
                        xml.onload = function() { handler(xml); }
                        // Carico il file XML dall'URL passato alla funzione
                        xml.load("data.xml");
                    } else if ( window.ActiveXObject ) { // Caso contrario, ricorro all'API proprietaria Microsoft per Browser IE
                        // Creo il nuovo oggetto XML
                        var xml = new ActiveXObject("Microsoft.XMLDOM");
                        // Imposto l'evento onload del documento
                        xml.onreadystatechange = function() {
                            if ( xml.readyState == 4 ) { handler(xml); }
                        }
                        // Carico il file XML dall'URL passatto alla funzione
                        xml.load("data.xml");
                    }
                }
    
    
                // Funzione per la popolazione della tabella
                function popolaTabella(xml) {
                    /**
                     * xml = documento XML
                     */
    
    
                    // Recupero la Tabella HTML
                    var table = document.getElementById("t1");
    
    
                    // Recupero tutti gli elementi "utente" definiti all'interno del documento XML
                    var utenti = xml.getElementsByTagName("utente");
    
    
                    // Ciclo attraverso tutti gli elementi e popolazione della tabella HTML
                    for (var i = 0; i < utenti.length; i++) {
                        // Recupero ogni singolo elemento "utente" del documento XML
                        var e = utenti[i];
    
    
                        // Recupero i vari valori per ogni elemento "utente"
                        var nominativo = e.getElementsByTagName("nominativo")[0].firstChild.data;
                        var punteggio = e.getElementsByTagName("punteggio")[0].firstChild.data;
    
    
                        // Creo ogni singolo riga della tabella HTML
                        var row = table.insertRow(i + 1); // + 1 = Non considero la testata della tabella
                        row.insertCell(0).appendChild(document.createTextNode(nominativo));
                        row.insertCell(1).appendChild(document.createTextNode(punteggio));
    
    
                    }
                }
            </script>
        </head>
        <body>
            <input type="button" value="carica dati" onclick="javascript:loadXML('data.xml', popolaTabella);" />
            <table id="t1" border="1" width="50%">
                <tr>
                    <th width="80%"><b>Nominativo</b></th>
                    <th width="20%"><b>Punteggio</b></th>
                </tr>
            </table>
        </body>
    </html>
    data.xml

    codice:
    <?xml version="1.0"?><utenti>
        <utente>
            <nominativo>Paolino Paperino</nominativo>
            <punteggio>10</punteggio>
        </utente>
        <utente>
            <nominativo>Mickey Mouse</nominativo>
            <punteggio>8</punteggio>
        </utente>
        <utente>
            <nominativo>Paperoga</nominativo>
            <punteggio>5</punteggio>
        </utente>
        <utente>
            <nominativo>Gastone</nominativo>
            <punteggio>2</punteggio>
        </utente>
    </utenti>
    Qualcuno mi riesce ad aiutare?
    Grazie mille!

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, per prima cosa hai dimenticato di chiudere un commento. C'è un commento multiriga che è stato aperto all'inizio dello script ma non è stato chiuso. Questo significa che il commento si estende fino alla chiusura del commento successivo (qualora ce ne fosse, come nel tuo caso).
    Nota che il forum formatta automaticamente lo script quando è inserito tra gli appositi tag di formattazione (come hai fatto), per cui puoi notare le parti colorate in verde che rappresentano appunto dei commenti.
    La riga function loadXML(url, handler) { risulta essere un commento perché racchiusa nel blocco di script tra /* e */. Questo chiaramente genera un errore di sintassi perché più avanti viene trovato il carattere }, cioè la chiusura di tale funzione che però non risulta essere stata aperta.
    Potresti verificarlo tu stesso attraverso la console web del tuo browser (in genere puoi aprirla premendo F12 e cliccando sull'apposita scheda "Console" ed eventualmente selezionando anche "JS" o "Script" che sia), se provi a cliccare sul tuo pulsante "carica dati", salterà fuori l'errore.

    Seconda cosa, quello script non è del tutto cross-browser. Il metodo load non è supportato da Chrome e Safari, in tal caso dovresti usare l'oggetto XMLHttpRequest e i suoi relativi metodi.
    Ad ogni modo, per avere una soluzione cross-browser, personalmente ti consiglierei l'uso di jQuery. Te lo sconsiglio se sei a digiuno, ma se ti interessa approfondire puoi sempre fare qualche ricerca, troverai sicuramente tantissimo materiale.

    Terza ed ultima cosa, se usi Chrome e vuoi testare lo script in locale, per delle restrizioni di sicurezza non ti funzionerà. Normalmente ti darà un errore di lettura perché di default non può leggere file da locale. In tal caso, il problema può essere risolto impostando l'opzione --allow-file-access-from-files sul proprio browser.
    Ultima modifica di KillerWorm; 02-07-2015 a 01:03
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.