Json 在Angular 4中从web服务获取xml

Json 在Angular 4中从web服务获取xml,json,xml,angular,api,xml2js,Json,Xml,Angular,Api,Xml2js,我只是试图从某个域中检索xml数据,并将它们读入我的应用程序。现在,我只想读取原始数据。根据我的研究,我认为最好将xml转换为json并加载到应用程序中。下面是我试图转换和打印它们的内容。有人能告诉我我做错了什么吗 getProduction() { var headers = new Headers({ 'Content-Type': 'text/xml'}) headers.set('Accept', 'text/xml'); headers.set('Content-Type',

我只是试图从某个域中检索xml数据,并将它们读入我的应用程序。现在,我只想读取原始数据。根据我的研究,我认为最好将xml转换为json并加载到应用程序中。下面是我试图转换和打印它们的内容。有人能告诉我我做错了什么吗

getProduction() {   
var headers = new Headers({ 'Content-Type': 'text/xml'})
headers.set('Accept', 'text/xml'); 
headers.set('Content-Type', 'text/xml');

//make the http request 
return this.http.get(this.url, {headers: headers})
                .map(res => JSON.parse(parseString(res.text(),'')))
                //Print JSON data?
                .subscribe(data =>{console.log(data);});
}

private handleErorr( error: Response){
  console.log('something went wrong');
  return Observable.throw(error.json().error || 'server error');
}

您的代码有两个问题:

  • parseString()
    方法是不同步的,因此它不会返回已解析的对象,您需要为此使用回调

  • 您正试图通过
    JSON.parse()
    parseString()的结果转换为JSON。这是错误的,因为结果应该已经是JS对象了。您根本不需要调用
    JSON.parse()

  • 试着这样做:

    getProduction() {
        var headers = new Headers({'Content-Type': 'text/xml'})
        headers.set('Accept', 'text/xml');
        headers.set('Content-Type', 'text/xml');
    
        //make the http request
        return this.http
            .get(this.url, {headers})
            .subscribe(res => {
                parseString(res.text(), (err, result) => {
                    if (err) {
                        return console.log('invalid XML');
                    }
    
                    console.log(result);
                })
            }, err => this.handleError(err);
    }
    
    private handleErorr(error: Response) {
        console.log('something went wrong');
        return Observable.throw(error.json().error || 'server error');
    }
    

    parseString
    方法的实现是什么?无论如何,您使用的是
    JSON.parse()
    ,它需要带有有效JSON的字符串参数,因此
    parseString
    需要返回它。还有,您看到了什么错误?我尝试了,结果显示它找不到名称数据?您确定您的API返回了什么吗?您是否在chrome inspector或某个rest客户端中检查了响应?尝试添加
    console.log(res.text())
    在调用
    parseString
    之前。哦,对不起,我的错,变量是
    result
    ,不是数据。我会更新代码的。谢谢。现在,我看到错误是“选项403(禁止)”和“加载选项失败:飞行前响应的HTTP状态代码403无效”。。基本上,它返回handleErrorWell您的API返回403禁止响应,看起来它在选项请求中失败,听起来像是CORS问题(您的API服务于不同于您的angular应用程序的域),或者您可能缺少一些令牌或cookie(取决于您的认证/授权API实现)。我不能帮你,因为我不熟悉ASP.NET,但它是一个不同的问题,超过了这个问题。您应该创建一个新的API,其中包含关于如何构建API的更多细节。