Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Angular 2中解析xml_Xml_Angular_Typescript_Observable - Fatal编程技术网

如何在Angular 2中解析xml

如何在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>

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

另外,在这里,一个可观察的是合适的吗

<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,因为

  • 这是TypeScript&不是JavaScript
  • 提供服务时,这会起作用,但在构建或分发时,它不会起作用,因为它会导致错误xml2json没有定义,因为它仅在javascript中可用&而在TS中或在传输时不可用。(发生在我的案例中)
  • 我做了这样的事

    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-

  • npm安装xml2js-g
  • 在服务文件中导入为: 从“xml2js”导入*作为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);              
          });
    }