用 XMLHttpRequest 获取 XML 数据需三步:声明 responseType 或 Accept 头确保获取 XML;检查 status/readyState 并用 DOMParser 补救 responseXML 为空;再用 DOM 方法提取数据并全面错误处理。

用 XMLHttpRequest 获取 XML 数据,核心是设置请求头、正确解析响应、再按需提取内容。现代浏览器都支持,但细节容易出错。
发送请求前:指定响应类型为 XML
如果不明确告诉浏览器“我要 XML”,responseXML 可能为空或解析失败。
- 调用
request.responseType = 'document'(推荐),确保返回 DOM 文档对象 - 或设置请求头
request.setRequestHeader('Accept', 'application/xml'),提示服务端返回 XML - 注意:如果服务端返回的是纯文本 XML(Content-Type 不是
application/xml或text/xml),responseXML仍可能为 null,此时可用DOMParser手动解析responseText
接收响应后:安全获取和验证 XML 文档
不能直接信任 responseXML,要检查是否有效。
- 先判断
request.status === 200和request.readyState === 4 - 再检查
request.responseXML && request.responseXML.documentElement是否存在 - 如果
responseXML为 null,用new DOMParser().parseFromString(request.responseText, 'text/xml')补救 - 解析后检查
parserError元素(如 Chrome/Firefox 中的parsererror标签),判断是否解析失败
从 XML 中提取数据:用标准 DOM 方法操作
拿到 responseXML(即 Document 对象)后,就和操作 HTML 一样:
- 用
getElementsByTagName('item')获取节点列表 - 用
querySelector('book title')或querySelectorAll('author[name="zhang"]')精准定位 - 读取文本内容:对每个元素调用
textContent(兼容性好)或innerHTML(仅当含标签时) - 读取属性:用
getAttribute('id')或element.id(部分属性有快捷方式)
错误处理不能省:网络、格式、结构都要覆盖
XML 请求失败原因多,只看 status=200 不够。
- 网络失败:
onerror回调必须监听 - XML 格式错误:解析后检查是否存在
parsererror节点 - 字段缺失:访问
item.getElementsByTagName('price')[0]?.textContent前加可选链或判断长度 -
编码问题:确保服务端返回的 XML 声明匹配实际编码(如
),否则中文可能乱码
不复杂但容易忽略。关键就是三步:声明要 XML、安全接住它、像操作网页一样查数据。










