XML DOM att traversera nodträdet
Att traversera (Traverse) innebär att gå igenom nodträdet.
Att traversera nodträdet
Du behöver ofta cykla igenom XML-dokument, till exempel: när du vill extrahera värdet för varje element.
Denna process kallas "att traversera nodträdet"
Detta exempel cyklar igenom alla undernoder av <book> och visar deras namn och värden:
Exempel
<!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 representerar alltid roden 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>
Exempel på förklaring:
- Ladda XML-strängen till
xmlDoc
i - Hämta undernoderna till roden
- Skriv ut namnet på varje undernod samt dess textnoders nodvärde
Skillnader i DOM-parsning mellan webbläsare
Alla moderna webbläsare stöder W3C DOM-standarden.
Men det finns några skillnader mellan webbläsare.
Hur de behandlar tomma rader och nylinjesymboler
DOM - tomma rader och nylinjesymboler
XML inkluderar ofta nylinjesymboler eller tomma tecken mellan noder. Detta är vanligt när dokument redigeras i enkla redigerare somanteckningsboken.
Följande exempel (redigerat ianteckningsbok) innehåller CR/LF (nylinjesymboler) mellan varje rad och två blanksteg före varje undernod:
<book> <title>雅舍谈吃</title> <author>梁实秋</author> <press>江苏文艺出版社</press> <year>2013</year> <price>35</price> <ISBN>9787539962771</ISBN> </book>
Internet Explorer 9 och tidigare versioner kommer inte att betrakta tomma rader eller nyrader som textnoder, medan andra webbläsare gör det.
Följande exempel kommer att visa antalet undernoder som äggs av roden (books.xml). Internet Explorer 9 och tidigare versioner kommer att visa 6 undernoder, medan Internet Explorer 10 och senare versioner samt andra webbläsare kommer att visa 9 undernoder:
Exempel
function myFunction(xml) { var xmlDoc = xml.responseXML; x = xmlDoc.documentElement.childNodes; document.getElementById("demo").innerHTML = "Antal undernod: " + x.length; }
PCDATA - Tolkad karaktärsdata (Parsed Character Data)
XML-tolkare tolkar vanligtvis all text i XML-dokumentet.
När XML-element tolkas, tolkas också texten mellan XML-markeringarna:
<message>Denna text kommer också att tolkas</message>
Tolkaren utför detta eftersom XML-element kan innehålla andra element, som i detta exempel, där <name>-elementet innehåller ytterligare två element (first och last):
<name><first>Bill</first><last>Gates</last></name>
Tolkaren kommer att dela upp det i följande underelement:
<name> <first>Bill</first> <last>Gates</last> </name>
Terminologin "Analyserad karaktärsdata" (PCDATA) används för att beskriva textdata som kommer att tolkas av XML-tolkaren.
CDATA - Otolkad karaktärsdata (Unparsed Character Data)
Terminologin CDATA används för att beskriva textdata som inte bör tolkas av XML-tolkaren.
"<
" och "&
" och andra tecken är otillåtna i XML-element.
"<
" kommer att generera ett fel, eftersom tolkaren tolkar det som början på ett nytt element.
"&
" kommer att generera ett fel, eftersom tolkaren tolkar det som början på en karaktersymbol.
Vissa texter (t.ex. JavaScript-kod) innehåller mycket "<
" eller "&
" tecken. För att undvika fel kan skriptkoden definieras som CDATA.
All innehåll i CDATA delen kommer att ignoreras av tolkaren.
" CDATA delen med "<![CDATA[
" Början, med "]]>
" Avslutning: "
<script> <![CDATA[ function matchwo(a,b) { om (a < b och a < 0) { return 1; } return 0; } } ]]> </script>
在上面的示例中,解析器会忽略 CDATA 部分内的所有内容。
关于 CDATA 部分的注意事项:
CDATA 部分不能包含字符串 "]]>
"。不允许嵌套 CDATA 部分。
标记 CDATA 部分结尾的 "]]>
" 不能包含空格或换行符。