【发布时间】:2020-12-08 22:33:53
【问题描述】:
我正在调用 Google Map API 并得到一个看起来像基本 XML 的响应。
尝试使用 DOMParser 解析 XML 失败,出现某种解析错误,但我不明白为什么。
整个代码:
let result: ILatitudeLongitude = { latitude: 0, longitude: 0 };
let axiosConfig = {
headers: { 'Accept': 'application/xhtml+xml' }
};
let url = 'http://some-server/api/GoogleMaps/GetGoogleAPI?fullAddress=123 some st, suburb, state, 1000';
let response = await axios.get(url, this.axiosConfig);
if (response && response.data) {
let parser = new DOMParser();
// response.data looks like this: "<lat>-34.9441798</lat><lng>138.5997218</lng>"
let xmlDoc = parser.parseFromString(response.data, "application/xhtml+xml");
if (xmlDoc) {
try {
let lng = xmlDoc.getElementsByTagName('lng')[0].childNodes[1].nodeValue;
let lat = xmlDoc.getElementsByTagName('lat')[0].childNodes[1].nodeValue;
if (lat && lng) {
result.latitude = +lat;
result.latitude = +lng;
}
} catch (e) {
errorHandler.handle(e);
}
}
}
return result;
尝试检索“lng”元素失败:
xmlDoc.getElementsByTagName('lng')
=> 0 个结果
如果我通过此语句检查 xmlDoc 的元素:
xmlDoc.querySelectorAll('*')
我看到它解析了 'lat' 元素,但是它给了我一个 parsererror 元素。深入分析 parsererror 元素,我发现:
“第 1 行第 61 列的错误:文档末尾的额外内容”
这很令人困惑,因为 XML 字符串甚至没有 61 个字符……它的长度为 46 个字符。
关于如何成功解析这个 XML 的小 sn-p 有什么想法吗?
【问题讨论】: