如何在Angular 2中解析xml
我使用的API使用XML而不是JSON。关于如何将以下XML转换为JSON或如何在ngFor指令中正确使用数据,有什么建议吗 另外,在这里,一个可观察的是合适的吗如何在Angular 2中解析xml,xml,angular,typescript,observable,Xml,Angular,Typescript,Observable,我使用的API使用XML而不是JSON。关于如何将以下XML转换为JSON或如何在ngFor指令中正确使用数据,有什么建议吗 另外,在这里,一个可观察的是合适的吗 <case-file> <serial-number>123456789</serial-number> <transaction-date>20150101</transaction-date> <case-file-header>
<case-file>
<serial-number>123456789</serial-number>
<transaction-date>20150101</transaction-date>
<case-file-header>
<filing-date>20140101</filing-date>
</case-file-header>
// ...
<classifications>
<classification>
<international-code-total-no>1</international-code-total-no>
<primary-code>025</primary-code>
</classification>
</classifications>
</case-file>
<case-file>
<serial-number>234567890</serial-number>
<transaction-date>20160401</transaction-date>
<case-file-header>
<filing-date>20160401</filing-date>
</case-file-header>
//...
<classifications>
<classification>
<international-code-total-no>1</international-code-total-no>
<primary-code>042</primary-code>
</classification>
</classifications>
</case-file>
123456789
20150101
20140101
// ...
1.
025
234567890
20160401
20160401
//...
1.
042
导出类API服务{
构造函数(私有http:http){}
private _apirl='app/api';
getCaseFile(){
返回this.http.get(this.\u apirl)
//在这里转换为JSON?
.map(res=>res.json().data)
.接住(这个.把手错误);
}
私有句柄错误(错误:响应){
控制台错误(error);
返回Observable.throw(error.json().error | |'Server error');
}
}
{{case file.serial number}
基于库,我实现了一个示例来接收XML数据并将其解析为Angular2应用程序:
var headers = new Headers();
(...)
headers.append('Accept', 'application/xml');
return this.http.get('https://angular2.apispark.net/v1/companies/', {
headers: headers
}).map(res => JSON.parse(xml2json(res.text(),' ')));
要使用该库,首先需要解析XML字符串:
var parseXml;
if (typeof window.DOMParser != "undefined") {
parseXml = function(xmlStr) {
return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml");
};
} else if (typeof window.ActiveXObject != "undefined" &&
new window.ActiveXObject("Microsoft.XMLDOM")) {
parseXml = function(xmlStr) {
var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(xmlStr);
return xmlDoc;
};
} else {
throw new Error("No XML parser found");
}
见这个问题:
请看这篇文章:。我宁愿使用npm模块而不是Javascript,因为
var parser = new xml2js.Parser({explicitArray : false});
//used xml2js parser from npm (https://www.npmjs.com/package/xml2js)
//and in my service i used this
this.http.get(this.newsURL)
.flatMap(res=>{
return Observable.fromPromise(this.getJSON(res.text()))
})
.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
如果您正在使用“发布并获取XML响应”: 使用xml2js-
let formdata = new URLSearchParams();
formdata.set('username','username');
formdata.set('pw','pw');
let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded' });
let options = new RequestOptions({ headers: headers, method: RequestMethod.Post});
postCaseFile () {
this.http.post(this._apiUrl, formdata.toString(), options)
//convert to JSON here
.map(res => {
xml2js.parseString( res.text(), function (err, result) {
console.dir(result); // Prints JSON object!
});
}).subscribe(data => {
console.log(data);
});
}
有几个xml到json库there@juvian我欢迎推荐。我不知道angular2有什么功能。不需要angular2,它与组件或任何与角度相关的东西无关,只需要将xml转换为json,然后使用Angular:谢谢,我会尝试一下。但是,出于某种原因,plunkr对我不起作用。你说的某种原因是什么意思?事实上,您需要单击“测试”标签;-)当我点击“测试”标签时,什么也没发生。DevTools控制台显示错误:
GEThttps://angular2.apispark.net/v1/companies/ 401(未经授权)
它在我这边起作用。。。您是否有这一行this.createAuthorizationHeader(headers)在getcompanys
方法中的code>?你有证书在里面…我知道这是旧的,但我得到了“找不到名称xml2json”你能写这个.getJSON方法和error.json的实现吗
let formdata = new URLSearchParams();
formdata.set('username','username');
formdata.set('pw','pw');
let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded' });
let options = new RequestOptions({ headers: headers, method: RequestMethod.Post});
postCaseFile () {
this.http.post(this._apiUrl, formdata.toString(), options)
//convert to JSON here
.map(res => {
xml2js.parseString( res.text(), function (err, result) {
console.dir(result); // Prints JSON object!
});
}).subscribe(data => {
console.log(data);
});
}