gpt4 book ai didi

json - 使用 xml2js 在 Angular 6 中未定义 parseString

转载 作者:行者123 更新时间:2023-12-02 20:13:16 24 4
gpt4 key购买 nike

到目前为止,我无法使用 Angular 6 使 xml2js 代码正常工作。我有一个 service.ts 返回 xml,但是当调用 xml2js.parseString 转换为 json 时,我始终收到未定义的错误。

“core.js:1673错误TypeError:无法读取未定义的属性“parseString” ”

服务.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { map, filter, catchError, mergeMap } from 'rxjs/operators';
import { HttpHeaders } from '@angular/common/http';

export interface Zid {
zpid: number;
}
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/x-www-form-urlencoded',
}),
responseType: 'text' as 'text'
};

@Injectable({
providedIn: 'root'
})

export class CdataServiceService {

constructor(private _http: HttpClient) { }
zipID = 'http://APiXml';
getZipID() {
return this._http.get(this.zipID, httpOptions)
.pipe
(map
(res =>
{
return res
}
)
)
}
}

组件.ts

import { Component, OnInit } from '@angular/core';
import { CdataServiceService, Zid } from '../cdata-service.service';
import { xml2js } from 'xml2js';
import { Observable, of } from 'rxjs';

@Component({
selector: 'app-cgetter',
templateUrl: './cgetter.component.html',
styleUrls: ['./cgetter.component.css']
})
export class CgetterComponent implements OnInit {

data = [];

constructor(private cds: CdataServiceService) { }

onKeyCompGet(event:any){
console.log(event.target.value);
}
_zid :Zid

getTheComps(){
this.cds.getZipID()//cdataServiceService.getZipId()
.subscribe(
res => {
this.convertToJson(res);
})
}


public convertToJson(data: string): Object {

let res;
console.log(data);

xml2js.parseString(data, { explicitArray: false }, (error, result) => {

if (error) {
throw new Error(error);
} else {
res = result;
console.log(result);
}

});

return res;

}

ngOnInit() {
}

}

我已将返回的 xml 运行到在线转换器,没有遇到任何问题。我不知道为什么该函数返回未定义。

还有没有办法验证 xml2js 中的所有文件是否正确加载?

最佳答案

CgetterComponent 类中的导入更改为:

import xml2js from 'xml2js';

或者:

import * as xml2js from 'xml2js';

如果您检查 xml2js文件,该文件在项目的 package.json 中被引用为 main 文件。它导出一个具有各种属性的对象,例如 BuilderParserparseString,它们都没有名称/标识符 xml2js。所以named import您正在使用 import { xml2js } from 'xml2js'; 尝试重要一个不存在的对象属性(在我共享的示例中记录 xml2js 以查看导出的属性) ,因此是未定义

您可以采取的另一种导入方法是使用命名导入直接导入您正在使用的 parseString 函数。这看起来像:

import { parseString } from 'xml2js';

然后您只需按如下方式使用它:

parseString(data, { explicitArray: false }, (error, result) => {
if (error) {
throw new Error(error);
} else {
res = result;
console.log(result);
}
});

这是一个example实际导入/使用情况。

希望有帮助!

关于json - 使用 xml2js 在 Angular 6 中未定义 parseString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53052221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com