XML DOM auswerten
- Vorherige Seite DOM-Knotenbaum
- Nächste Seite DOM-Loader
大多数浏览器都内置了用于读取和操作 XML 的 XML 解析器。
解析器将 XML 转换为 JavaScript 可访问的对象。
解析 XML
所有现代浏览器都内置了用于读取和操作 XML 的 XML 解析器。
解析器将 XML 读入内存,并将其转换为可被 JavaScript 访问的 XML DOM 对象。
微软的 XML 解析器与其他浏览器中的解析器存在差异。微软的解析器支持对 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都包含遍历 XML 树、访问、插入及删除节点的函数。
在本教程中,我们将向您讲解如何创建可在 IE 及其他浏览器中运行的脚本。
通过微软的 XML 解析器加载 XML
微软的 XML 解析器内置于 Internet Explorer 5 及更高版本中。
Das folgende JavaScript-Stück lädt das XML-Dokument ("books.xml) lädt den Parser:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.load("books.xml");
Code-Übersetzung:
- 第一行创建空的微软 XML 文档对象
- Die zweite Zeile schaltet die asynchrone Ladevorgänge ab, um sicherzustellen, dass der Parser vor der Fortsetzung des Skripts das Dokument vollständig geladen hat
- Die dritte Zeile teilt dem Parser mit, dass das Dokument namens "books.xml" geladen werden soll
Das folgende JavaScript-Stück lädt die Zeichenkette namens txt in den Parser:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.loadXML(txt);
Anmerkung:loadXML() 该方法用于加载字符串(文本),而 load() 用于加载文件。
den XML-Parser in Firefox und anderen Browsern
Das folgende JavaScript-Stück lädt das XML-Dokument ("books.xml) lädt den Parser:
xmlDoc=document.implementation.createDocument("","",null); xmlDoc.async="false"; xmlDoc.load("books.xml");
Code-Übersetzung:
- Die erste Zeile erstellt ein leeres XML-Dokumentobjekt
- Die zweite Zeile schaltet die asynchrone Ladevorgänge ab, um sicherzustellen, dass der Parser vor der Fortsetzung des Skripts das Dokument vollständig geladen hat
- Die dritte Zeile teilt dem Parser mit, dass das Dokument namens "books.xml" geladen werden soll
Das folgende JavaScript-Stück lädt die Zeichenkette namens txt in den Parser:
parser=new DOMParser(); xmlDoc=parser.parseFromString(txt,"text/xml");
Code-Übersetzung:
- Die erste Zeile erstellt ein leeres XML-Dokumentobjekt
- Die zweite Zeile teilt dem Parser mit, dass die Zeichenkette namens txt geladen werden soll
Anmerkung:Internet Explorer loadXML() Methode, um einen XML-String zu parsen, während andere Browser DOMParser Objekt.
XML-Dokument Parseieren - Ein Beispiel für einen Cross-Browser
Das folgende Beispiel parseiert das XML-Dokument ("books.xml) lädt den XML-Parser:
<html> <body> <script type="text/javascript"> try //Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); } catch(e) { try //Firefox, Mozilla, Opera, etc. { xmlDoc=document.implementation.createDocument("","",null); } catch(e) {alert(e.message)} } try { xmlDoc.async=false; xmlDoc.load("books.xml"); document.write("xmlDoc ist geladen, bereit zur Verwendung"); } catch(e) {alert(e.message)} </script> </body> </html>
Fehler: Zugriffsfehler zwischen Domänen
Aus Sicherheitsgründen erlauben moderne Browser keinen Cross-Domain-Zugriff.
Das bedeutet, dass die Webseite sowie die XML-Datei, die sie lädt, beide auf dem gleichen Server sein müssen.
Die von CodeW3C.com geöffneten XML-Dateien befinden sich auf dem Domänennamen CodeW3C.com.
Wenn du den obigen Beispiel auf deiner Webseite verwenden möchtest, musst du die XML-Datei auf deinem eigenen Server platzieren. Andernfalls wird xmlDoc.load() den Fehler "Access is denied" erzeugen.
XML-String Parseieren - Ein Beispiel für einen Cross-Browser
Der folgende Code lädt und parseiert einen XML-String:
<html> <body> <script type="text/javascript"> text="<bookstore>" text=text+"<book>"; text=text+"<title>Harry Potter</title>"; text=text+"<author>J K. Rowling</author>"; text=text+"<year>2005</year>"; text=text+"</book>"; text=text+"</bookstore>"; try //Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.loadXML(text); } catch(e) { try //Firefox, Mozilla, Opera, etc. { parser=new DOMParser(); xmlDoc=parser.parseFromString(text,"text/xml"); } catch(e) {alert(e.message)} } document.write("xmlDoc ist geladen, bereit zur Verwendung"); </script> </body> </html>
Anmerkung:Internet Explorer verwendet die Methode loadXML() zum Parsen von XML-Zeichenfolgen, während andere Browser DOMParser Objekt.
- Vorherige Seite DOM-Knotenbaum
- Nächste Seite DOM-Loader