首页 > 解决方案 > 无法在 Ionic 3 中使用 xml2json:TypeError: exists is not a function

问题描述

我正在使用 ionic 3 / angular 4 需要将任何 XML 解析为 JSON,经过 2 天的尝试后,我现在陷入了 TypeError: exists is not a function with no way to debug it 我知道。

我已经尝试重新安装 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);
        });
    }

};

标签: angularionic3

解决方案


最好的办法是将您的 Observable 转换为 Promise。您希望等到整个 XML 完成,这样您就有了一个有效的 XML-DOC。然后 (.then ) 使用 xml2json 方法将 doc 转换为 json doc。

我相信当您使用 Observable 时,您会尝试在未返回所有元素时转换文档,因此会导致错误。无效的 XML DOM 导致向 javascript 注册错误的数据类型,这会删除一些可用的方法。


推荐阅读