Как получить XML с помощью apetch api

Я пытаюсь создать приложение погоды, отображающее погоду и температуру многих дней недели. В настоящее время я использую openweathermap api для такой задачи, дело в том, что информация, которую я хочу (то есть дата погоды), поступает только в формате xml. Поскольку я восстанавливаю его в ES6 (ES2015) по академическим причинам, я хотел также использовать apetch-выборку, но поскольку метод выборки анализирует его, он просто доставляет ошибку. так как я могу получить его или есть лучший способ сделать это.

let apis = {
    currentWeather: { //get user selected recomendation weather
        api:"http://api.openweathermap.org/data/2.5/forecast/daily?lat=",
        parameters: "&mode=xml&units=metric&cnt=6&APPID=/*api key*/",
        url: (lat, lon) => {
            return apis.currentWeather.api + lat + "&lon=" + lon +
                   apis.currentWeather.parameters
        }
    }
};
function getCurrentLoc() { 
    return new Promise((resolve, reject) =>  navigator.geolocation
                                             .getCurrentPosition(resolve, reject))
}
function getCurrentCity(location) {
    const lat = location.coords.latitude;
    const lon = location.coords.longitude;
    return fetch(apis.currentWeather.url(lat, lon))
    .then(response => response.json())
    .then(data => console.log(data))
}
getCurrentLoc()
.then( coords => getCurrentCity(coords))

Ответ 1

Использование собственного DOMParser getCurrentCity (location) можно записать:

function getCurrentCity(location) {
    const lat = location.coords.latitude;
    const lon = location.coords.longitude;
    return fetch(apis.currentWeather.url(lat, lon))
        .then(response => response.text())
        .then(str => (new window.DOMParser()).parseFromString(str, "text/xml"))
        .then(data => console.log(data))
}

Ответ 2

Я предполагаю, что ошибка исходит из этой функции: response => response.json(), поскольку ответ не является допустимым объектом JSON (это XML).

Насколько я знаю, для fetch нет собственного XML-парсера, но вы можете обрабатывать ответ как текст и использовать сторонний инструмент для фактического синтаксического анализа, например, jQuery имеет функцию $.parseXML().

Он будет выглядеть примерно так:

function getCurrentCity(location) {
    const lat = location.coords.latitude;
    const lon = location.coords.longitude;
    return fetch(apis.currentWeather.url(lat, lon))
        .then(response => response.text())
        .then(xmlString => $.parseXML(xmlString))
        .then(data => console.log(data))
}