Esplorazione dell'albero dei nodi del DOM XML
Esplorazione (Traverse) significa esplorare l'albero dei nodi.
Esplorazione dell'albero dei nodi
Spesso hai bisogno di iterare un documento XML, ad esempio: quando vuoi estrarre il valore di ogni elemento.
Questo processo si chiama 'esplorazione dell'albero dei nodi'
Esempio di esempio che itera tutti i sottoelementi di <book> 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>雅舍谈吃</title>" + "<author>梁实秋</author>" + "<year>2013</year>" + "</book>"; parser = new DOMParser(); xmlDoc = parser.parseFromString(text,"text/xml"); // documentElement rappresenta sempre il nodo radice 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>
Esempio di spiegazione:
- Carica una stringa XML in
xmlDoc
In - Ottieni i nodi figli dell'elemento radice
- Esempio: outputta il nome di ogni nodo figlio e il valore del nodo di testo
Differenze nei browser nella解析 DOM
Tutti i browser moderni supportano la specifica W3C DOM.
Ma ci sono alcune differenze tra i browser.
Il modo in cui li gestiscono
DOM - Spazi bianchi e nuove linee
L'XML di solito contiene caratteri di nuova riga o spazi bianchi tra i nodi. Questo avviene spesso quando si modificano documenti con editor semplici come Blocco Note.
Esempio seguente (modificato con Blocco Note) contiene CR/LF (caratteri di nuova riga) tra ogni riga e due spazi prima di ogni nodo figlio:
<book> <title>雅舍谈吃</title> <author>梁实秋</author> <press>江苏文艺出版社</press> <year>2013</year> <price>35</price> <ISBN>9787539962771</ISBN> </book>
Internet Explorer 9 e le versioni precedenti non considerano spazi bianchi o nuove linee come nodi di testo, mentre altri browser lo fanno.
Esempio seguente mostrerà il numero di nodi figli dell'elemento radice (books.xml). Le versioni di IE9 e precedenti ne mostreranno 6 nodi figli, mentre le versioni di IE10 e successive e altri browser ne mostreranno 9 nodi figli:
Esempio
function myFunction(xml) { var xmlDoc = xml.responseXML; x = xmlDoc.documentElement.childNodes; document.getElementById("demo").innerHTML = "Numero di nodi figli: " + x.length; }
PCDATA - Dati di carattere解析 (Parsed Character Data)
Il parser XML di solito解析 tutti i testi nel documento XML.
Quando si解析 XML elementi, viene anche解析 il testo tra i tag XML:
<message>Questo testo verrà anche解析</message>
Il parser esegue questa operazione perché gli elementi XML possono contenere altri elementi, come nel presente esempio, dove l'elemento <name> contiene altri due elementi (first e last):
<name><first>Bill</first><last>Gates</last></name>
Il parser lo decomprime nei seguenti sottoelementi:
<name> <first>Bill</first> <last>Gates</last> </name>
Il termine "解析字符数据" (PCDATA) viene utilizzato per descrivere i dati di testo che saranno解析 dal parser XML.
CDATA - Dati di carattere non解析 (Unparsed Character Data)
Il termine CDATA viene utilizzato per descrivere i dati di testo che non dovrebbero essere解析 dal parser XML.
"<
" e "&
I caratteri " in un elemento XML sono illegali.
"<
" Genera un errore perché il parser lo interpreta come l'inizio di un nuovo elemento.
"&
" Genera un errore perché il parser lo interpreta come l'inizio di un'entità di carattere.
Alcuni testi (ad esempio codice JavaScript) contengono una grande quantità di "<
" o "&
" Carattere. Per evitare errori, è possibile definire il codice dello script come CDATA.
Tutti i contenuti all'interno della parte CDATA vengono ignorati dal parser.
" Parte CDATA con "<![CDATA[
" Inizio, con "]]>
" Fine:
<script> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) { return 1; else { return 0; } } ]]> </script>
在上面的示例中,解析器会忽略 CDATA 部分内的所有内容。
关于 CDATA 部分的注意事项:
CDATA 部分不能包含字符串 "]]>
"。不允许嵌套 CDATA 部分。
标记 CDATA 部分结尾的 "]]>
" 不能包含空格或换行符。