请考虑以下代码:
var fileURL = "example.xml";
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState == xhr.DONE && xhr.status == 200) {
data = xhr.responseXML;
console.log(data);
}
}
xhr.open('GET', fileURL);
xhr.send();
如果我的example.xml
是不正确的XML(声明节点之前我的换行符是多余的),则xhr.responseXML
等于null
。
很显然,xhr.responseText
内部的某个地方被传递给XML解析器,但失败了。我想获取一些更详细的错误信息,例如解析器绊倒的行/列号以及错误类型。
当然,我可以将响应文本显式提供给解析器:
if (data === null) {
var parser = new DOMParser();
var doc = parser.parseFromString(xhr.responseText, "application/xml");
console.log(doc.getElementsByTagName("parsererror"));
}
但是DOMParser
报告错误的方式很奇怪-它是一个xml节点,带有一些html + css样式的内容。我不确定从此类对象提取错误信息的安全性如何,因为它没有遵循任何特定的标准。
因此,我正在寻找最标准的方法来捕获格式错误的XML错误,并提供尽可能多的详细信息。