首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析角2中的xml

如何解析角2中的xml
EN

Stack Overflow用户
提问于 2016-04-02 02:09:16
回答 3查看 69.5K关注 0票数 19

我使用的API使用的是XML而不是JSON。对于如何将以下XML转换为JSON或如何正确使用ngFor指令中的数据,有什么建议吗?

另外,在这里可以观察到吗?

代码语言:javascript
复制
<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>
代码语言:javascript
复制
export class apiService {
   constructor (private http: Http) {}

   private _apiUrl = 'app/api';  

   getCaseFile () {
     return this.http.get(this._apiUrl)
//conversion to JSON here?
                    .map(res => <CaseFile[]> res.json().data)
                     .catch(this.handleError);
   }
    private handleError (error: Response) {

     console.error(error);
    return Observable.throw(error.json().error || 'Server error');
   }
 }

<div *ngFor="#cf of case-file">{{case-file.serial-number}}</div>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-02 06:37:36

基于库http://goessner.net/download/prj/jsonxml/,我实现了一个示例来接收Angular2数据并将它们解析为一个Angular2应用程序:

代码语言:javascript
复制
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字符串:

代码语言:javascript
复制
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");
}

见这个问题:

参见这个plunkr:https://plnkr.co/edit/dj63ASQAgrNcLLlwyAum?p=preview

票数 13
EN

Stack Overflow用户

发布于 2016-12-18 09:38:42

我宁愿使用npm模块,而不是Javascript,因为

  1. 这是TypeScript,而不是JavaScript
  2. 虽然提供此服务是可行的,但在构建或分发时,它将无法工作,因为它会导致错误,因为xml2json没有定义,因为它只在javascript中可用&在TS中没有使用,也没有在传输溢出时使用。

我做了这样的事。

代码语言: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'));
票数 3
EN

Stack Overflow用户

发布于 2017-05-03 06:52:15

如果您正在使用POST和获取XML响应:使用xml2js - https://www.npmjs.com/package/xml2js

  1. npm安装xml2js -g
  2. 导入服务文件:导入*作为xml2js从'xml2js';
  3. 代码: 让formdata =新URLSearchParams();formdata.set('username','username');formdata.set('pw','pw');let headers =新标题({‘Content’:‘application/x form-urlencoded’};let options =新RequestOptions({ headers: headers,method: RequestMethod.Post});postCaseFile () { this.http.post(this._apiUrl,formdata.toString(),options) //转换为JSON to .map(res => { xml2js.parseString( res.text(),function (err,result) {console.dir(结果);//打印JSON对象!});}.subscribe(data => {console.log(Data)););}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36368405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档