angular - 无法在 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);
});
}
};
解决方案
最好的办法是将您的 Observable 转换为 Promise。您希望等到整个 XML 完成,这样您就有了一个有效的 XML-DOC。然后 (.then ) 使用 xml2json 方法将 doc 转换为 json doc。
我相信当您使用 Observable 时,您会尝试在未返回所有元素时转换文档,因此会导致错误。无效的 XML DOM 导致向 javascript 注册错误的数据类型,这会删除一些可用的方法。
推荐阅读
- airflow - Airflow 中的动态任务 ID 名称
- javascript - 日期格式转换问题
- python - 下面的 Python 代码有什么问题?
- clojure - 尝试在 Clojure 中拆分字符串遇到惰性序列问题
- gstreamer - gstreamer gst-rtsp-server 是否接受 udpsrc (RTP)?
- python-3.x - 爬虫不产生任何输出
- elastic-stack - 使用 grok 处理器调试 Elastic Ingest 管道
- excel - 在调试模式下运行的代码 - 似乎无法处理大型数据条目
- javascript - getMonth 十二月后显示未定义
- c - 任意特定整数 c 程序