Root, nodi e figli nell'accesso ad XML

di Andrea Zani, in XML,

In uno degli articoli precedenti abbiamo visto come creare un semplice contatore con XML.

Continuiamo la trattazione dell'argomento introducendo alcune novità e soffermandoci sull'accesso al contenuti dei file XML.

La gerarchia dei TAG in XML

Alcuni script che accedono ai dati contenuti in un file XML possono apparire complesse perché non si ha ancora chiaro la gestione "gerarchica" o dei "livelli" dei vari TAG in XML. Ipotizziamo di avere un file XML con questa struttura che contiene un semplice albero genealogico:

Immagine

Ci sono due figli: Marco e Luigi, il primo dei quali ha altri lui due figli, Davide e Giuseppe. Luigi invece ha tre figli, Claudio, Lisa e Amilcare. Quest'ultimo ha, a sua volta, due figlie, Eleonora e Francesca. Il nodo "famiglia" è il principale, comunemente chiamato elemento di primo livello ( root ) ed in un documento XML può essercene solo uno.

Cercando di visualizzare un documento XML con più di un elemento di primo livello, con un viewer, come Internet Explorer che dalla versione 5 supporta XML a pieno titolo, questi ci informerà che il documento in questione contiene un errore.

Marco e Luigi saranno elementi di secondo livello, Davide, Giuseppe, Claudio, Lisa e Amilcare di terzo livello, e infine, Eleonora e Francesca di quarto livello.

Nello script precedente era presente questa istruzione:

Set root = objxml.documentElement

che assegna all'oggetto root i dati contenuti nel primo livello del nostro documento XML.

Se volessimo puntare ai nomi dei primi due figli per visualizzare la rispettiva prole, scriveremo:

Set marco=objxml.documentElement.childnodes(0)

per Marco.

Set luigi=objxml.documentElement.childnodes(1)

per Luigi. Se volessimo puntare invece alle due figlie di Amilcare, dovremmo scrivere:

Set figlie=objxml.documentElement.childnodes(1).childnodes(2)

Il primo childnode ha come valore uno perché punterà al secondo figlio, "Luigi" (ricordo che la numerazione per la trattazione dei dati parte dallo zero). Il secondo ha come valore due perché punterà a "Amilcare".

In un esempio reale con le ASP, per leggere i nodi delle due nipoti, scriveremo:

<%
set xml=server.createobject("Microsoft.XMLDOM")
xml.async=false
xml.load(server.mappath("famiglia.xml"))

response.write xml.documentElement.childnodes(1).childnodes(2).childnodes(0).nodename
response.write ""
response.write xml.documentElement.childnodes(1).childnodes(2).childnodes(1).nodename
response.write ""
set xml=Nothing

%>

Sullo schermo appariranno i nomi di Eleonora e Francesca, proprio come ci aspettavamo.

Naturalmente una gestione simile di un documento XML, facendo riferimento dal nodo principale e via via, fino al nodo che ci interessa, è molto scomoda.

Per fare riferimento direttamente al nodo di nostro interesse possiamo usare la funzione " GetElementsByTagName ".

Ecco come verrebbe "tradotto" l'esempio precedente

<%
set xml=server.createobject("Microsoft.XMLDOM")
xml.async = false
xml.load(server.mappath("famiglia.xml"))
set figli=xml.getelementsbytagname("amilcare")

response.write figli.item(0).childnodes(0).nodename
response.write ""
response.write figli.item(0).childnodes(1).nodename
response.write ""

set xml = Nothing
%>

La proprietà ".item(0)" restituisce il primo nodo trovato dalla funzione "getelementsbytagname".

Se nel nostro documento ci fossero più nodi con lo stesso nome, potremo con la proprietà "length" dell'oggetto restituito dopo la ricerca, ottenere quanti nodi sono presenti nel documento XML che rispettano il criterio di ricerca, e quindi far riferimento ad ognuno di essi con ".item(0)", ".item(1)", "item(x)"?

2 pagine in totale: 1 2
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata