Извлечение xml из веб-сервиса в Angular 4

Я просто пытаюсь получить данные XML из какого-то домена и прочитать их в моем приложении. Сейчас я просто хочу читать необработанные данные. Из моего исследования выяснилось, что лучше всего конвертировать xml в json и загружать их в приложение. Вот что я пытался конвертировать и распечатывать. Может кто-нибудь посоветовать, что я делаю не так?

getProduction() {   
var headers = new Headers({ 'Content-Type': 'text/xml'})
headers.set('Accept', 'text/xml'); 
headers.set('Content-Type', 'text/xml');

//make the http request 
return this.http.get(this.url, {headers: headers})
                .map(res => JSON.parse(parseString(res.text(),'')))
                //Print JSON data?
                .subscribe(data =>{console.log(data);});
}

private handleErorr( error: Response){
  console.log('something went wrong');
  return Observable.throw(error.json().error || 'server error');
}

1 ответ

Решение

Есть 2 проблемы с вашим кодом:

  1. parseString() Метод не является синхронным, поэтому он не будет возвращать проанализированный объект, для этого необходимо использовать обратный вызов.

  2. Вы пытаетесь преобразовать результат parseString() в JSON через JSON.parse(), Это просто неправильно, так как результатом должен быть уже объект JS. Вам не нужно JSON.parse() позвони вообще.

Попробуйте это так:

getProduction() {
    var headers = new Headers({'Content-Type': 'text/xml'})
    headers.set('Accept', 'text/xml');
    headers.set('Content-Type', 'text/xml');

    //make the http request
    return this.http
        .get(this.url, {headers})
        .subscribe(res => {
            parseString(res.text(), (err, result) => {
                if (err) {
                    return console.log('invalid XML');
                }

                console.log(result);
            })
        }, err => this.handleError(err);
}

private handleErorr(error: Response) {
    console.log('something went wrong');
    return Observable.throw(error.json().error || 'server error');
}
Другие вопросы по тегам