JavaScript可通过XMLHttpRequest或fetch()获取并解析XML数据:前者兼容旧浏览器,需设responseType='document';后者需用DOMParser解析text响应,注意CORS、MIME类型、编码及错误处理。
JavaScript可以通过原生 XMLHttpRequest 或现代的 fetch() API 发起请求获取 XML 数据,关键在于正确设置请求头、响应类型,并解析返回的 XML 文档。
这是最传统且兼容性最好的方式,适合需要支持旧版浏览器的场景。
XMLHttpRequest 实例,调用 open() 指定 GET 方法和 URLresponseType = 'document'(推荐)或保持默认,让浏览器自动解析为 XMLDocument
load 事件,在回调中检查 status === 200 和 responseXML 是否存在getElementsByTagName、querySelector)操作 responseXML
示例:
const xhr = new XMLHttpRequest();
xhr.open('GET', 'data.xml');
xhr.responseType = 'document'; // 显式要求返回 XML 文档
xhr.onload = function() {
if (xhr.status === 200 && xhr.responseXML) {
const title = xhr.responseXML.querySelector('title')?.textContent;
console.log(title);
}
};
xhr.send();
fetch() 更简洁,但默认不自动解析 XML,需手动处理响应体。
fetch(url
),确保服务器返回 Content-Type: application/xml 或 text/xml
response.text() 获取字符串,再用 DOMParser 解析为 XML 文档response.json()——它只适用于 JSON示例:
fetch('data.xml')
.then(res => {
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.text(); // 先取原始文本
})
.then(str => {
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(str, 'application/xml');
// 检查解析错误(如格式不合法)
const errorNode = xmlDoc.querySelector('parsererror');
if (errorNode) throw new Error('Invalid XML');
const items = xmlDoc.querySelectorAll('item');
items.forEach(item => console.log(item.textContent));
})
.catch(err => console.error('加载 XML 失败:', err));
实际开发中容易踩坑的地方:
Access-Control-Allow-Origin,否则浏览器会拦截Content-Type(如 application/xml),否则 responseXML 可能为 null
)需和服务端实际响应一致,否则中文可能乱码catch 或 onerror 不够全面便于复用,兼顾错误提示和基本解析:
function loadXML(url) {
return fetch(url)
.then(res => {
if (!res.ok) throw new Error(`HTTP ${res.status} ${res.statusText}`);
return res.text();
})
.then(str => {
const parser = new DOMParser();
const doc = parser.parseFromString(str, 'application/xml');
if (doc.querySelector('parsererror')) {
throw new Error('XML 解析失败');
}
return doc;
});
}
// 使用
loadXML('config.xml')
.then(xmlDoc => console.log(xmlDoc.documentElement.tagName))
.catch(err => console.error(err));