在实际的数据可视化开发中,经常会遇到原始数据为xml格式的情况,而ECharts图表组件要求输入的是结构化的JSON数据,因此需要完成xml到JSON的转换适配工作。下面将从数据准备到最终图表渲染的完整流程进行说明。

准备xml测试数据
首先我们需要一份符合规范的xml数据,假设我们要渲染一个展示各城市销售额的柱状图,xml数据内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<sales_data>
<item>
<city>北京</city>
<amount>1200</amount>
</item>
<item>
<city>上海</city>
<amount>980</amount>
</item>
<item>
<city>广州</city>
<amount>850</amount>
</item>
<item>
<city>深圳</city>
<amount>1100</amount>
</item>
</sales_data>
加载并解析xml数据
在前端环境中,我们可以通过XMLHttpRequest或者fetchAPI来加载xml数据,之后使用浏览器的DOMParser来解析xml字符串为可操作的文档对象。
下面是加载并解析xml的示例代码:
// 加载xml数据
function loadXmlData(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
// 解析xml字符串为文档对象
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xhr.responseText, 'text/xml');
resolve(xmlDoc);
} else {
reject(new Error('加载xml数据失败'));
}
}
};
xhr.send();
});
}
将xml数据转换为ECharts所需格式
ECharts的柱状图需要两组数据,一组是类目轴的坐标名称,也就是城市名称,另一组是对应的值,也就是销售额。我们需要从解析后的xml文档中提取这两部分内容,组装成对应的数组。
转换逻辑的代码实现如下:
// 将xml数据转换为ECharts需要的格式
function convertXmlToChartData(xmlDoc) {
const items = xmlDoc.getElementsByTagName('item');
const cityList = [];
const amountList = [];
// 遍历每个item节点提取数据
for (let i = 0; i < items.length; i++) {
const item = items[i];
const city = item.getElementsByTagName('city')[0].textContent;
const amount = Number(item.getElementsByTagName('amount')[0].textContent);
cityList.push(city);
amountList.push(amount);
}
return {
cityList: cityList,
amountList: amountList
};
}
渲染ECharts图表
完成数据转换后,就可以初始化ECharts实例,将转换后的数据填入图表配置项中,完成图表的渲染。
完整的渲染代码如下:
// 渲染ECharts柱状图
async function renderChart() {
try {
// 加载xml数据,这里假设xml文件放在项目根目录的data文件夹下
const xmlDoc = await loadXmlData('/data/sales.xml');
// 转换数据格式
const chartData = convertXmlToChartData(xmlDoc);
// 初始化ECharts实例,假设页面有一个id为chart的容器
const chartDom = document.getElementById('chart');
const myChart = echarts.init(chartDom);
// 图表配置项
const option = {
title: {
text: '各城市销售额统计'
},
tooltip: {},
xAxis: {
type: 'category',
data: chartData.cityList
},
yAxis: {
type: 'value'
},
series: [
{
name: '销售额',
type: 'bar',
data: chartData.amountList
}
]
};
// 设置配置项并渲染图表
myChart.setOption(option);
} catch (error) {
console.error('渲染图表失败:', error);
}
}
// 页面加载完成后执行渲染
window.onload = renderChart;
注意事项
- xml数据中的节点名称需要和解析时使用的
getElementsByTagName的参数保持一致,否则会提取不到数据。 - 从xml中提取的数值默认是字符串类型,需要手动转换为Number类型,避免ECharts渲染时出现数据异常。
- 如果xml数据中存在命名空间,解析时需要使用对应的命名空间方法来获取节点,避免解析错误。
- 如果是跨域加载xml数据,需要服务端配置对应的跨域头,否则前端请求会被拦截。
EChartsxml_datadata_conversionchart_rendering修改时间:2026-06-11 03:42:26