XML 解析器
-
定义
所有主要的浏览器都有一个内置的 XML 解析器来访问和操作 XML。XML DOM(文档对象模型)定义了用于访问和编辑 XML 的属性和方法。但是,在可以访问 XML 文档之前,必须将其加载到 XML DOM 对象中。所有现代的浏览器都有一个内置的 XML 解析器,可以将文本转换为 XML DOM 对象。 -
解析文本字符串
本示例将文本字符串解析为 XML DOM 对象,并使用 JavaScript 从中提取信息:
尝试一下<html> <body> <p id="demo"></p> <script> var text, parser, xmlDoc; text = "<bookstore><book>" + "<title>日常意大利语</title>" + "<author>贾达·德·劳伦蒂斯</author>" + "<year>2005</year>" + "</book></bookstore>"; parser = new DOMParser(); xmlDoc = parser.parseFromString(text,"text/xml"); document.getElementById("demo").innerHTML = xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue; </script> </body> </html>
代码解释定义了一个文本字符串:text = "<bookstore><book>" + "<title>日常意大利语</title>" + "<author>贾达·德·劳伦蒂斯</author>" + "<year>2005</year>" + "</book></bookstore>";
XML DOM 解析器已创建:parser = new DOMParser();
解析器使用文本字符串创建一个新的 XML DOM 对象:xmlDoc = parser.parseFromString(text,"text/xml");
-
Internet Explorer 的旧版本
Internet Explorer 的旧版本(IE5,IE6,IE7,IE8)不支持 DOMParser 对象。要处理旧版本的 Internet Explorer,请检查浏览器是否支持 DOMParser 对象,或者创建ActiveXObject:
尝试一下<html> <body> <p id="demo"></p> <script> var text, parser, xmlDoc; text = "<bookstore><book>" + "<title>日常意大利语</title>" + "<author>贾达·德·劳伦蒂斯</author>" + "<year>2005</year>" + "</book></bookstore>"; if (window.DOMParser) { parser = new DOMParser(); xmlDoc = parser.parseFromString(text,"text/xml"); } else { xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = false; xmlDoc.loadXML(text); } document.getElementById("demo").innerHTML = xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue; </script> </body> </html>
-
XMLHttpRequest对象
XMLHttpRequest 对象具有内置的 XML 解析器。responseText 属性以字符串形式返回响应。responseXML 属性将响应作为 XML DOM 对象返回。如果要将响应用作 XML DOM 对象,则可以使用 responseXML 属性。请求文件 cd_catalog.xml 并将响应用作 XML DOM 对象:
尝试一下<html> <body> <h2>我的CD收藏</h2> <button type="button" onclick="loadXMLDoc()">获取我的CD收藏</button> <p id="demo"></p> <script> function loadXMLDoc() { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myFunction(this); } }; xmlhttp.open("GET", "/jc_script/xml/cd_catalog.xml", true); xmlhttp.send(); } function myFunction(xml) { var x, i, xmlDoc, txt; xmlDoc = xml.responseXML; txt = ""; x = xmlDoc.getElementsByTagName("ARTIST"); for (i = 0; i< x.length; i++) { txt += x[i].childNodes[0].nodeValue + "<br>"; } document.getElementById("demo").innerHTML = txt; } </script> </body> </html>