XML DOM-webbläsardifferenser
Olika webbläsare behandlar textnoder på olika sätt i XML DOM.
Exempel
Följande exempel använder XML-filer books.xml.
Funktion loadXMLDoc()Ligger utanför JavaScript och används för att ladda XML-filer.
- Visa längden på nodlistan
- Detta exempel visar längden på en nodlista. Resultatet är olika i IE och andra webbläsare.
- 忽略节点间的空文本
- Detta exempel kontrollerar nodens nodeType och hanterar endast elementnoder.
Webbläsardifferenser i DOM-parsning
Alla moderna webbläsare stöder W3C DOM-standarden.
Men det finns skillnader mellan webbläsare. De viktiga skillnaderna är två:
- Sätt att ladda XML
- Sätt att hantera tomma platser och radbrytningar
i "Analysera XML DOM” Detta avsnitt har förklarat olika sätt att ladda XML.
I denna sektion kommer vi att förklara olika sätt att hantera tomma platser och radbrytningar.
DOM - Tomma platser och radbrytningar
XML innehåller ofta radbrytningar eller blanktecken mellan noder. Detta är ett vanligt problem när man använder enkla redigerare (t.ex. Notepad).
Följande exempel (redigerat i Notepad) innehåller CR/LF mellan varje rad och två blanksteg före varje undernod:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
Firefox och andra webbläsare behandlar tomma tomma platser eller radbrytningar som textnoder, medan Internet Explorer inte gör det.
下面的代码片段显示 (books.xml 的) 根元素拥有多少个子节点:
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.documentElement.childNodes; document.write("Number of child nodes: " + x.length);
例子解释:
- 通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中
- 获取根元素的子节点
- 输出子节点数目
结果取决于所使用的浏览器。Firefox 输出 9,而 IE 输出 4。
忽略节点间的空文本
如需忽略元素节点之间的空文本节点,需要检查节点类型。元素节点的类型是 1:
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.documentElement.childNodes; for (i=0;i<x.length;i++) { if (x[i].nodeType==1) {// only process element nodes document.write(x[i].nodeName); document.write("<br />"); } }
例子解释:
- 通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中
- 获取根元素的子节点
- 检查每个子节点的节点类型。如果节点类型是 "1",则是元素节点