angular - 在 Angular 中读取 XML 文件
问题描述
我正在尝试以角度从资产文件夹中读取 XML 文件,我尝试了 HttpClient get 方法来获取数据,但它显示以下错误,我在 http 方法中传递了交叉标头。
请让我知道如何在 Angular 中读取 XML 文件
错误:
(未知 url)的 http 失败响应:0 未知错误”,错误:错误
代码:
import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { HttpClient, HttpHeaders } from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent {
constructor(private router: Router, private httpClient: HttpClient) {
this.getProducts();
}
getProducts() {
const headers = new HttpHeaders(
{ 'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods': 'GET',
'Access-Control-Allow-Origin': '*'
});
headers.set('Content-Type', 'text/xml');
this.httpClient
.get('assets/test.xml', { headers, responseType: 'text' })
.subscribe(output => console.log(output));
}
}
解决方案
好吧,您可以按照本文xml2js
中的建议使用将响应转换为.xml
json
在这里,试一试:
import { Component } from "@angular/core";
import { Observable } from "rxjs/observable";
import { switchMap } from "rxjs/operators";
import { HttpClient } from "@angular/common/http";
declare const require;
const xml2js = require("xml2js");
@Component({
selector: "my-app",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent {
employees$: Observable<Array<any>>;
constructor(private http: HttpClient) {}
ngOnInit() {
this.employees$ = this.getEmployees();
}
getEmployees() {
return this.http
.get("/assets/employees.xml", { responseType: "text" })
.pipe(
switchMap(async xml => await this.parseXmlToJson(xml))
);
}
async parseXmlToJson(xml) {
// With parser
/* const parser = new xml2js.Parser({ explicitArray: false });
parser
.parseStringPromise(xml)
.then(function(result) {
console.log(result);
console.log("Done");
})
.catch(function(err) {
// Failed
}); */
// Without parser
return await xml2js
.parseStringPromise(xml, { explicitArray: false })
.then(response => response.Employees.Employee);
}
}
在您的模板中:
<ul class="list-group" *ngIf="employees$ | async as employees">
<li class="list-group-item" *ngFor="let employee of employees">
<pre>{{ employee | json }}</pre>
</li>
</ul>
这是来自此链接文章的 xml:
<?xml version="1.0" encoding="UTF-8"?>
<Employees>
<Employee>
<id>1</id>
<name>Faisal</name>
<gender>Male</gender>
<mobile>514545</mobile>
</Employee>
<Employee>
<id>2</id>
<name>Bhavdip</name>
<gender>Male</gender>
<mobile>5431643</mobile>
</Employee>
<Employee>
<id>3</id>
<name>Irshad</name>
<gender>Male</gender>
<mobile>43265436</mobile>
</Employee>
<Employee>
<id>4</id>
<name>Keyur</name>
<gender>Male</gender>
<mobile>5435431</mobile>
</Employee>
<Employee>
<id>5</id>
<name>Tabish</name>
<gender>Male</gender>
<mobile>432656</mobile>
</Employee>
</Employees>
这是您的参考的工作示例演示。
推荐阅读
- wpf - 如何隐藏数据网格中的最后一条水平线?
- node.js - 有没有办法在节点网站的路由下添加单独的节点网站?
- postgresql - 截断和插入与更新的性能
- sql - 按多列分组并限制每组 - Postgres
- html - Selenium 从 ChromeWebElement 创建新的 HTML 文档
- spring-boot - 如何使用 Java Sdk 集成主卡支付网关
- javascript - 禁用 numericTextBox onClick 单选按钮单击
- gnupg - .gpg、.sig. 和 .asc 之间有哪些有意义的区别?
- reactjs - Cant api 连接不适用于生产反应本机
- ruby - 在 Google-API-client Gem 中为模块起别名