Невозможно использовать xml2json в Ionic 3: TypeError: существующие не является функцией - PullRequest
0 голосов
/ 17 апреля 2019

Я использую ionic 3 / angular 4 для анализа JSON любого XML, после 2 дней попыток я застрял в TypeError: существует не функция без способа отладки, которую я знаю.

Я уже пытался переустановить xml2json, установить версию @type, не уверен, что в моем коде что-то не так, вот ошибка:

TypeError: exists is not a function
    at Function.getRoot (http://localhost:8100/build/main.js:162940:7)
    at bindings (http://localhost:8100/build/main.js:162819:32)
    at Object.<anonymous> (http://localhost:8100/build/main.js:183310:37)
    at __webpack_require__ (http://localhost:8100/build/main.js:20:30)
    at Object.<anonymous> (http://localhost:8100/build/main.js:198811:13)
    at __webpack_require__ (http://localhost:8100/build/main.js:20:30)
    at Object.<anonymous> (http://localhost:8100/build/main.js:198684:18)
    at __webpack_require__ (http://localhost:8100/build/main.js:20:30)
    at Object.<anonymous> (http://localhost:8100/build/main.js:198675:18)
    at __webpack_require__ (http://localhost:8100/build/main.js:20:30)

Услуги:

import { Injectable }               from '@angular/core';
import { Http }            from '@angular/http';
import { ConstantsServices }        from './constants.service';
import { Xml2json }                 from 'xml2json';

@Injectable()
export class FinanzaService {
  private apiURL = this.constantsServices.apiUrl;


  constructor(public http: Http, private constantsServices: ConstantsServices) {
  }

// Obtengo datos del XML del mef-app eggds balance fiscal GC y SPNF

 public getBalances() {
  return this.http.get(`https://www.w3schools.com/xml/simple.xml`).map(res => JSON.parse(Xml2json(res.text(),'  ')))
  /*.map(data => {
    console.log(data);
    return [].concat.apply([], data);
  })*/;
  }
}

Файл TS:

import { Component } from '@angular/core';
import { NavController, LoadingController, AlertController } from 'ionic-angular';
import { FinanzaService } from '../../services/finanzapublica.service';


@Component({
  selector: 'balances-home',
  templateUrl: 'balances.html'
})

export class BalancesPage {

  public titlePage: string = 'Balance Fiscal';
  public loader: any;
  public dataRequest: any;

  constructor(public navCtrl: NavController, public loadingCtrl: LoadingController,
    public alertCtrl: AlertController,
    public finanzaService: FinanzaService) {



  }
    callService() {
      this.finanzaService.getBalances().subscribe(
        (companies) => {
          console.log(companies);
          //this.companies = companies.list.Company;
          //console.log(this.companies);
        });
    }

};

1 Ответ

0 голосов
/ 18 апреля 2019

Лучше всего превратить ваш Observable в Обещание.Вы хотите подождать, пока не завершится ВСЕ XML, поэтому у вас есть действительный XML-DOC.Затем (.then) используйте метод xml2json для преобразования документа в документ json.

Я считаю, что когда вы используете Observable, вы пытаетесь конвертировать документ, когда не все элементы возвращены, поэтомуэто приведет к ошибке.Неверный XML DOM вызывает неправильный тип данных для регистрации в javascript, который удаляет некоторые доступные методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...