原生 JavaScript 解析 XML 字符串与文档:XMLHttpRequest + DOMParser
在 Web 开发中,解析 XML 数据是常见需求。虽然现代开发更多使用 JSON,但许多遗留系统或特定标准仍依赖 XML。本文将通过原生 JavaScript,演示如何在不依赖 jQuery 等库的情况下,利用 XMLHttpRequest 获取 XML 数据,并使用 DOMParser 将 XML 字符串安全地解析为可操作的 DOM 对象。
核心实现方案概述
解析 XML 的核心逻辑分为两步:
1. 获取 XML 原始数据:通常通过 XMLHttpRequest (Ajax) 从服务器异步或同步获取。
2. 解析数据:获取到 XML 字符串(responseText)后,使用浏览器内置的 DOMParser API 将其转换为标准的 DOM 树,以便使用标准 DOM 方法(如 getElementsByTagName)进行查询和操作。
准备工作
确保浏览器支持 XMLHttpRequest 和 DOMParser。前者兼容 IE7+ 及所有现代浏览器,后者在现代浏览器中均受支持(IE 8+ 支持,早期版本需使用 Microsoft.XMLDOM)。以下方案主要针对现代浏览器及 IE9+ 环境优化。
具体操作步骤
第 1 步:创建 XMLHttpRequest 对象
目的:建立网络请求通道,兼容不同版本的浏览器(主要是处理老版 IE 的 ActiveXObject)。
- 操作:检测
window.XMLHttpRequest是否存在,若存在则实例化;否则尝试创建ActiveXObject。
var XMLHttp = null;
if (window.XMLHttpRequest) {
// 现代浏览器
XMLHttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
// IE5/IE6 旧式浏览器
XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
第 2 步:配置请求与设置回调(以异步为例)
目的:定义当服务器返回数据时如何处理,并发起请求。异步模式不会阻塞主线程,推荐优先使用。
- 入口:XMLHttp 对象实例。
- 动作:监听
onreadystatechange事件,检查readyState === 4(完成)且status === 200或304(成功)。
if (XMLHttp !== null) {
XMLHttp.onreadystatechange = function() {
if (XMLHttp.readyState === 4) {
if (XMLHttp.status === 200 || XMLHttp.status === 304) {
// 在此处进行解析和处理
console.log('数据接收完成');
}
}
};
// 初始化请求:GET 方式获取 test1.xml
XMLHttp.open("get", "test1.xml", true); // true 表示异步
XMLHttp.send();
}
第 3 步:解析 XML 字符串为 DOM 对象
目的:将接收到的文本内容转换为结构化的 DOM 对象,从而能够像操作 HTML DOM 一样操作 XML。
- 关键参数:
DOMParser.parseFromString(text, mimeType)。 - 注意:推荐使用
text/xml作为 MIME 类型。如果服务器直接返回了正确的 DOM 对象(responseXML),也可直接使用,但显式使用parseFromString能更好控制解析过程并统一处理 XML 字符串的情况。
// 在 onreadystatechange 的成功分支内
var XMLDoc = XMLHttp.responseText; // 获取原始 XML 字符串
var XMLDom = (new DOMParser()).parseFromString(XMLDoc, "text/xml");
// 验证是否解析成功
var parseError = XMLDom.getElementsByTagName(本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













