Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 7 di 30
  • livello principiante
Indice lezioni

"Navigare" nel nuovo oggetto XML

Gli strumenti da utilizzare per lavorare con XML li avete già tutti nel vostro Personal Computer
Gli strumenti da utilizzare per lavorare con XML li avete già tutti nel vostro Personal Computer
Link copiato negli appunti

Come si utilizza l'oggetto che abbiamo creato da un file XML?
Nel capitolo 1 potete trovare la risposta teorica completa a questa domanda: il nuovo oggetto possiede un'interfaccia standard denominata DOM (Document Object Model). Qui invece vi proponiamo uno schema molto semplice che vi permette di cominciare subito a lavorare con codice Javascript (e non solo).

Lo schema è semplice perché le tecniche di trattamento dell'XML vi consentono di vedere il vostro file (sia che sia in formato testo originale, sia che sia stato caricato in una variabile) sempre e solo come un "albero". Potete perciò fare sempre riferimento al concetto di "nodo" dell'albero:

Schema nodo

Consideriamo di aver inserito il nodo della figura dentro alla variabile chiamata nodo_attuale e vediamo come si eseguono tutte le operazioni più importanti indicate in figura:

Leggere la "carta d'identità" del nodo: nome e tipo del nodo (per il significato del tipo vedi il capitolo 1)

var nome = nodo_attuale.nodeName
  /* restituisce il nome posseduto dal nodo dentro
  il file XML, cioè fra i tag: <nome></nome> */

  var tipo = nodo_attuale.nodeType
  /* restituisce un valore da 1 a 12 che
  identifica il tipo del nodo */

Risalire al padre: il padre è unico e l'istruzione è veramente semplice

    var padre = nodo_attuale.parentNode

Volendo si può anche risalire da qualsiasi punto alla radice dell'albero, cioè all'oggetto documento, per leggere magari il nome e la posizione del file XML originale:

  var documento = nodo_attuale.ownerDocument;
    var file_originale = documento.url

Cercare i figli. Purtroppo i figli possono essere numerosi: o ne scegliamo uno in particolare, oppure li riuniamo tutti in un vettore:

- scegliere un solo figlio: possiamo prendere il primo o l'ultimo

  var figlio = nodo_attuale.firstChild  
     var figlio = nodo_attuale.lastChild

- scegliere più figli insieme:

    var vettore_figli = nodo_attuale.childNodes

Questa istruzione crea un vettore (con indice numerico che parte da 0) contenente tutti i figli. Il ciclo for riportato di seguito legge il vettore e dovrebbe essere abbastanza chiaro:

  for (var contatore = 0; contatore < vettore_figli.length; contatore++)
     {
      alert (vettore_figli.item(contatore))
     }

Riassumendo: le due istruzioni per il vettore dei figli sono .length per conoscere la lunghezza e .item(i) per conoscere la posizione i-esima.

- cercare nel sottoalbero: la seguente istruzione permette addirittura di cercare in tutto il sottoalbero del nodo gli elementi con un certo nome, per metterli in un vettore

    var vettore_sottoalbero = nodo_attuale.getElementsByTagName(nome nodo)

Cercare i fratelli: con le seguenti istruzioni si possono cercare il fratello che precede e quello che segue il nodo attuale nel file XML:

  var fratello = nodo_attuale.nextSibling
    var fratello = nodo_attuale.previousSibling

Leggere gli attributi: come i figli anche gli attributi possono essere numerosi:

- leggere un solo attributo:

    var valore_attributo = nodo_attuale.getAttribute(nome)

- leggere tutti gli attributi

    var vettore_attributi = nodo_attuale.attributes

Quest'ultima istruzione genera un vettore come nel caso dei figli. Ma, poiché gli attributi hanno un nome prima che un valore, le posizioni di questo vettore sono richiamabili, oltre che con un indice numerico, anche col nome dell'attributo corrispondente:

  vettore_attributi.item(0)
    vettore_attributi.getNamedItem(nome attributo)

Entrambe le istruzioni precedenti sono valide.

Leggere il testo: nel codice il testo viene trasformato in un nodo figlio di tipo "text". Per leggerlo occorre ripescare il figlio adatto: se avete la cura di scrivere il testo all'inizio basterà richiamare l'istruzione .firstChild, altrimenti dovrete scorrervi tutti i figli per trovarne uno di tipo testo. Vedremo come scorrere i figli nei prossimi paragrafi, intanto riassumiamo alcune istruzioni utili per i testi:

- leggere il contenuto del nodo testo: esistono due possibilità:

  var testo = nodo_testo.data
    var testo = nodo_testo.nodeValue

- leggere tutto il testo contenuto nel sottoalbero: si può compiere questa strana ma potentissima operazione con l'istruzione:

    var testo = nodo_attuale.text

Ti consigliamo anche