Albero del nodo trasversale XML DOM
Attraversare significa scorrere o viaggiare attraverso l'albero dei nodi.
Attraversare l'albero dei nodi
Spesso si desidera eseguire il loop di un documento XML, ad esempio: quando si desidera estrarre il valore di ogni elemento.
Questo è chiamato "Attraversamento dell'albero dei nodi"
L'esempio seguente scorre tutti i nodi figlio di <book> e ne mostra i nomi e i valori:
Esempio
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book>";
parser = new DOMParser();
xmlDoc
= parser.parseFromString(text,"text/xml");
// documentElement always
represents the root node
x = xmlDoc.documentElement.childNodes;
for (i =
0; i < x.length ;i++) {
txt += x[i].nodeName + ": " +
x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
</script>
</body>
</html>
Produzione:
title: Everyday Italian
author: Giada De Laurentiis
year: 2005
Esempio spiegato:
- Carica la stringa XML in xmlDoc
- Ottieni i nodi figlio dell'elemento radice
- Per ogni nodo figlio, emetti il nome del nodo e il valore del nodo del nodo di testo
Differenze del browser nell'analisi DOM
Tutti i browser moderni supportano la specifica W3C DOM.
Tuttavia, ci sono alcune differenze tra i browser. Una differenza importante è:
- Il modo in cui gestiscono gli spazi bianchi e le nuove linee
DOM - Spazi bianchi e nuove linee
XML contiene spesso una nuova riga, o caratteri di spazio vuoto, tra i nodi. Questo è spesso il caso quando il documento viene modificato da un semplice editor come Blocco note.
L'esempio seguente (modificato da Blocco note) contiene CR/LF (nuova riga) tra ogni riga e due spazi davanti a ciascun nodo figlio:
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
Internet Explorer 9 e versioni precedenti NON trattano gli spazi vuoti o le nuove righe come nodi di testo, a differenza di altri browser.
L'esempio seguente produrrà il numero di nodi figlio dell'elemento root (of books.xml ). IE9 e versioni precedenti produrranno 4 nodi figlio, mentre IE10 e versioni successive e altri browser genereranno 9 nodi figlio:
Esempio
function myFunction(xml) {
var xmlDoc = xml.responseXML;
x =
xmlDoc.documentElement.childNodes;
document.getElementById("demo").innerHTML =
"Number
of child nodes: " + x.length;
}
PCDATA - Dati caratteri analizzati
I parser XML normalmente analizzano tutto il testo in un documento XML.
Quando un elemento XML viene analizzato, viene analizzato anche il testo tra i tag XML:
<message>This text is also parsed</message>
Il parser lo fa perché gli elementi XML possono contenere altri elementi, come in questo esempio, dove l'elemento <name> contiene altri due elementi (primo e ultimo):
<name><first>Bill</first><last>Gates</last></name>
e il parser lo suddividerà in sotto-elementi come questo:
<name>
<first>Bill</first>
<last>Gates</last>
</name>
Parsed Character Data (PCDATA) è un termine utilizzato per i dati di testo che verranno analizzati dal parser XML.
CDATA - Dati carattere (non analizzati).
Il termine CDATA viene utilizzato per i dati di testo che non devono essere analizzati dal parser XML.
Caratteri come "<" e "&" sono illegali negli elementi XML.
"<" genererà un errore perché il parser lo interpreta come l'inizio di un nuovo elemento.
"&" genererà un errore perché il parser lo interpreta come l'inizio di un'entità carattere.
Alcuni testi, come il codice JavaScript, contengono molti caratteri "<" o "&". Per evitare errori il codice dello script può essere definito come CDATA.
Tutto all'interno di una sezione CDATA viene ignorato dal parser.
Una sezione CDATA inizia con " <![CDATA[ " e termina con " ]]> ":
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
Nell'esempio sopra, tutto all'interno della sezione CDATA viene ignorato dal parser.
Note sulle sezioni CDATA:
Una sezione CDATA non può contenere la stringa "]]>". Le sezioni CDATA annidate non sono consentite.
Il "]]>" che segna la fine della sezione CDATA non può contenere spazi o interruzioni di riga.