0

0

将上传的XML数据可视化 D3.js/ECharts的应用

月夜之吻

月夜之吻

发布时间:2026-01-23 01:01:19

|

723人浏览过

|

来源于php中文网

原创

xml需先用domparser解析为document,再提取节点转为js数组供d3/echarts使用;须处理命名空间、类型转换和大数据分片,否则图表空白或卡顿。

将上传的xml数据可视化 d3.js/echarts的应用

XML 数据解析后怎么喂给 D3.js

D3.js 本身不直接读取或解析 XML,必须先用浏览器原生 DOMParserfetch + response.xml 得到 Document 对象,再手动遍历节点提取结构化数据。常见错误是直接把 XML 字符串传给 d3.select().data() —— 这会报错,因为 D3 期望的是数组或可迭代对象,不是 XML DOM 树。

实操建议:

人民网AIGC-X
人民网AIGC-X

国内科研机构联合推出的AI生成内容检测工具

下载
  • new DOMParser().parseFromString(xmlString, "application/xml") 解析字符串;检查 parserError(如存在 parsererror 元素说明格式非法)
  • 优先用 querySelectorAll("item")getElementsByTagName("record") 定位重复数据节点,避免递归遍历整棵树
  • 每个匹配节点用 node.getAttribute("attrName")node.textContent 提取字段,转成 JS 对象数组,例如:
    const data = Array.from(doc.querySelectorAll("book")).map(el => ({
      title: el.querySelector("title")?.textContent || "",
      price: parseFloat(el.getAttribute("price") || "0"),
      category: el.getAttribute("category")
    }));

ECharts 怎么加载 XML 解析后的数据?

ECharts 不关心数据来源,只认标准 JS 数组/对象。但容易踩的坑是:XML 中数值字段常为字符串(如 <value>42</value>),若没显式转 Number,柱状图可能按字符串排序、折线图坐标轴标错刻度。

实操建议:

  • 解析阶段就做类型归一:对已知应为数字的字段(如 countscore)强制调用 Number() 或一元加号 +el.textContent
  • 时间字段(如 <date>2023-10-05</date>)需用 new Date() 转为时间戳,否则 ECharts 的 time 坐标轴无法识别
  • 嵌套结构(如多层 <category><sub>A</sub></category>)建议扁平化:用 category_sub: el.querySelector("category sub")?.textContent 生成新字段,避免在 series.encode 中写复杂路径

XML 太大时 D3/ECharts 渲染卡顿怎么办?

超过 5000 条记录的 XML,前端解析+渲染极易阻塞主线程。D3 的 .enter().append() 批量操作和 ECharts 的大数据模式(large: true)都依赖数据预处理到位。

实操建议:

  • 解析前先用 xmlString.length 判断大小,超 1MB 就提示用户“建议分页或服务端聚合”
  • D3 场景下,用 requestIdleCallback 分批追加元素,例如每次处理 200 条:
    function renderBatch(data, index = 0) {
      const batch = data.slice(index, index + 200);
      d3.select("#chart").selectAll("div").data(batch).enter().append("div")...;
      if (index + 200 < data.length) {
        requestIdleCallback(() => renderBatch(data, index + 200));
      }
    }
  • ECharts 场景下,开启 large: true 并设置 largeThreshold: 1000,但前提是数据已是纯数值数组(不能含未转换的字符串字段)

为什么 XML 命名空间会让解析失败?

带命名空间的 XML(如 <rss xmlns="http://purl.org/rss/1.0/"></rss>)会导致 querySelector 返回空——浏览器严格区分命名空间,"item""{http://purl.org/rss/1.0/}item" 是不同标签。

实操建议:

  • 解析前先剥离命名空间:用正则 xmlString.replace(/xmlns="[^"]*"/g, "")(仅限简单场景,不破坏结构前提下)
  • 更稳妥的方式是用 getElementsByTagNameNS("*", "item"),其中第一个参数传 "*" 表示忽略命名空间
  • 如果必须保留命名空间且结构复杂,改用 document.evaluate() 配合 XPath,例如:document.evaluate('//x:item', doc, nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null),需提前定义 nsResolver
XML 的 namespace、类型隐式转换、大数据量分片,这三处最容易被跳过,结果就是图表空白、坐标错乱或页面假死。别指望库自动兜底,解析环节的手动校验和清洗,比后续绘图代码重要得多。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
ECharts是什么
ECharts是什么

ECharts是基于JavaScript的开源可视化库,能够帮助开发者轻松地实现各种复杂的数据可视化效果,提供了丰富的图表类型和交互功能。本专题为大家提供ECharts是什么的相关的文章、下载、课程内容,供大家免费下载体验。

279

2023.08.04

echarts自适应大小设置
echarts自适应大小设置

使用ECharts的自适应大小设置可以使图表能够根据不同屏幕尺寸和设备进行自适应。一种是使用resize事件,在图表容器大小改变时重新渲染图表;另一种是使用CSS样式,通过设置图表容器的宽度和高度为百分比值,使图表容器根据父元素的大小进行自适应。根据实际需求选择合适的方法,可以使图表在不同设备上都能够良好地显示和交互 。

484

2023.09.13

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1947

2024.04.01

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 10.1万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号