XML JavaScript 学习笔记
XML 是什么?
XML(eXtensible Markup Language)是一种标记语言,用于将数据存储和传输。与 HTML 不同,XML 没有预定义的标记,而是允许开发人员自定义标记来描述数据。XML 的语法规则类似于 HTML,但比 HTML 更严格。
JavaScript 如何解析 XML?
JavaScript 提供了几种解析 XML 的方式:
1. 使用 XMLHttpRequest
可以通过 XMLHttpRequest 对象从服务器上获取 XML 数据。获取到的数据可以通过 responseXML 属性以 DOM 方式来解析。
javascriptCopy Codevar 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 Codevar parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml");
// 解析 XML
3. 使用 ActiveXObject(仅适用于 IE 浏览器)
在早期版本的 IE 浏览器中,可以使用 ActiveXObject 对象解析 XML。以下是使用 ActiveXObject 的示例:
javascriptCopy Codevar 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);