Gli ultimi tutorial di sviluppo web
 

XML DOM Traverse nodo della struttura


Attraversamento mezzi looping attraverso o che viaggiano attraverso l'albero dei nodi.


Attraversando l'albero dei nodi

Spesso si desidera ciclo un documento XML, ad esempio: quando si desidera estrarre il valore di ogni elemento.

Questo è chiamato "Traversing the node tree"

L'esempio che segue scorre tutti i nodi figli di <libro> e visualizza i loro nomi e 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
Prova tu stesso "

Esempio spiegato:

  1. Caricare la stringa XML in xmlDoc
  2. Ottenere i nodi figli dell'elemento radice
  3. Per ogni nodo figlio, in uscita il nome del nodo e il valore del nodo del nodo di testo

Le differenze del browser in DOM di analisi

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 bianchi-spazi e nuove linee

DOM - spazi bianchi e Nuove linee

XML spesso contiene nuova linea, o spazi vuoti, tra i nodi. Questo è spesso il caso in cui il documento è a cura di un semplice editor come Notepad.

Il seguente esempio (edited by Notepad) contiene CR / LF (new line) tra una riga e due posti di fronte a ogni nodo figlio:

<book>
  <title>Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

Internet Explorer 9 e precedenti non trattare vuoti bianchi-spazi, o nuove linee come nodi di testo, mentre altri browser fanno.

Il seguente esempio in uscita il numero di nodi figlio dell'elemento radice (of books.xml ) ha. IE9 e precedenti volontà di uscita 4 nodi figlio, mentre IE10 e versioni successive, e altri browser sarà in uscita 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;
}
Prova tu stesso "

PCDATA - analizzati carattere dati

parser XML normalmente analizzare tutto il testo in un documento XML.

Quando un elemento XML viene analizzato, il testo tra i tag XML viene anche analizzato:

<message>This text is also parsed</message>

Il parser fa questo perché gli elementi XML può contenere altri elementi, come in questo esempio, dove il <name> elemento contiene altri due elementi (first and last) :

<name><first>Bill</first><last>Gates</last></name>

e il parser suddividerlo in sotto-elementi come questo:

<name>
  <first>Bill</first>
  <last>Gates</last>
</name>

I dati di carattere parsed (PCDATA) è un termine usato per i dati di testo che verrà analizzato dal parser XML.


CDATA - (Unparsed) dati di caratteri

Il termine è usato CDATA su dati di testo che non deve essere analizzato dal parser XML.

Personaggi come "<" e "&" sono illegali in elementi XML.

"<" Genererà un errore perché il parser interpreta come l'inizio di un nuovo elemento.

"&" Genererà un errore perché il parser lo interpreta come l'inizio di una entità carattere.

Alcuni di testo, come il codice JavaScript, contiene un sacco di "<" o "&" caratteri. Per evitare errori di codice di script possono essere definiti come CDATA.

Tutto all'interno di una sezione CDATA viene ignorato dal parser.

Una sezione CDATA inizia con " <![CDATA[ " and ends with " ]]> " :

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    } else {
        return 0;
    }
}
]]>
</script>

Nell'esempio di cui sopra, tutto all'interno della sezione CDATA viene ignorato dal parser.

Notes on CDATA sections:

Una sezione CDATA non può contenere la stringa "]]>" . sezioni nidificati CDATA non sono ammessi.

Il "]]>" , che segna la fine della sezione CDATA non può contenere spazi o interruzioni di riga.