Пожалуйста, примите во внимание этот код:
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 с как можно большей детализацией.