在IE浏览器尤其是IE8及更早版本中,JavaScript无法通过标准DOMParser或XMLHttpRequest直接以统一方式处理XML,只能借助ActiveXObject创建XML文档组件来完成加载与解析。这种方式依赖系统安装的MSXML库,写法与现代浏览器差异较大。

创建XML文档对象
由于不同IE版本对应的ActiveXObject progID不同,通常先做兼容性尝试。常见可用的有Microsoft.XMLDOM、MSXML2.DOMDocument.3.0等。
function createXmlDoc() {
var progIds = ['MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'Microsoft.XMLDOM'];
var xmlDoc = null;
for (var i = 0; i < progIds.length; i++) {
try {
xmlDoc = new ActiveXObject(progIds[i]);
break;
} catch (e) {
// 当前progID不可用,继续尝试下一个
}
}
if (!xmlDoc) {
throw new Error('当前IE环境无法创建XML文档对象');
}
return xmlDoc;
}
加载XML字符串或文件
使用loadXML方法可载入字符串,使用load方法可异步或同步载入xml文件。建议将async设为false以便同步拿到结果。
var doc = createXmlDoc();
doc.async = false;
// 从字符串加载
var xmlStr = '<root><item id="1">测试</item></root>';
doc.loadXML(xmlStr);
// 从文件加载
// doc.load('demo.xml');
读取节点与属性
通过selectSingleNode与selectNodes配合XPath语句提取数据,text属性获取文本,getAttribute获取属性。
var node = doc.selectSingleNode('/root/item');
if (node) {
var id = node.getAttribute('id');
var text = node.text;
alert('id=' + id + ', text=' + text);
}
var nodes = doc.selectNodes('/root/item');
for (var j = 0; j < nodes.length; j++) {
console.log(nodes[j].text);
}
处理解析错误
ActiveXObject提供parseError对象,可判断XML是否合法并输出错误原因。
if (doc.parseError && doc.parseError.errorCode !== 0) {
var err = doc.parseError;
alert('错误码:' + err.errorCode + ' 行:' + err.line + ' 原因:' + err.reason);
} else {
// XML解析正常,继续业务处理
}
注意事项
- ActiveXObject仅在IE且未禁用ActiveX时可用,现代Edge或Chrome不支持。
- 加载远程XML需注意IE安全区域设置,本地文件可能受限。
- 若系统已升级,建议用标准DOMParser替代旧逻辑。
维护老项目时,封装一个统一的createXmlDoc函数能减少重复兼容代码,也方便后续整体替换实现。
ActiveXObjectXMLIE修改时间:2026-07-28 10:48:21