XML JavaScript 学习笔记

XML 是什么?

XML(eXtensible Markup Language)是一种标记语言,用于将数据存储和传输。与 HTML 不同,XML 没有预定义的标记,而是允许开发人员自定义标记来描述数据。XML 的语法规则类似于 HTML,但比 HTML 更严格。

JavaScript 如何解析 XML?

JavaScript 提供了几种解析 XML 的方式:

1. 使用 XMLHttpRequest

可以通过 XMLHttpRequest 对象从服务器上获取 XML 数据。获取到的数据可以通过 responseXML 属性以 DOM 方式来解析。

javascriptCopy Code
var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var xmlDoc = this.responseXML; // 解析 XML } }; xhttp.open("GET", "file.xml", true); xhttp.send();

2. 使用 DOMParser

如果 XML 数据不是从服务器获取的,而是作为字符串提供的,可以使用 DOMParser 将其解析成 DOM 对象。

javascriptCopy Code
var parser = new DOMParser(); var xmlDoc = parser.parseFromString(xmlString, "text/xml"); // 解析 XML

3. 使用 ActiveXObject(仅适用于 IE 浏览器)

在早期版本的 IE 浏览器中,可以使用 ActiveXObject 对象解析 XML。以下是使用 ActiveXObject 的示例:

javascriptCopy Code
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.load("file.xml"); // 解析 XML

实例

下面是一个简单的 XML 示例,将其解析为 DOM 对象,并通过 JavaScript 修改其属性值:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book category="web"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> <book category="web"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> <book category="programming"> <title lang="en">JavaScript: The Definitive Guide</title> <author>David Flanagan</author> <year>2011</year> <price>45.99</price> </book> </bookstore>
javascriptCopy Code
// 解析 XML var parser = new DOMParser(); var xmlDoc = parser.parseFromString(xmlString, "text/xml"); // 获取第一本书的 title 元素 var title = xmlDoc.getElementsByTagName("title")[0]; // 修改该元素的 lang 属性 title.setAttribute("lang", "zh"); // 获取第一本书的 price 元素并修改其文本内容 var price = xmlDoc.getElementsByTagName("price")[0]; price.textContent = "29.99"; // 将修改后的 XML 转换成字符串 var newXmlString = new XMLSerializer().serializeToString(xmlDoc);