@eksml/xml

中文文档
0.3.0发布于 2026/10/20MITTypeScriptES Module构建来源已验证近 30 天下载 1.2万

快速轻量级XML/HTML 解析器、序列器和流线工具包

中文使用文档
文档目录8 节
  1. 安装
  2. 分析
  3. 写入
  4. 流线
  5. 文档
  6. 基准
  7. 承认
  8. 许可证
Eksml

埃克斯姆尔

CI coverage npm license

用于JavaScript和TypeScript的快而轻快的XML/HTML解析器,序列器和流线工具箱. 只导入您需要的东西, 树解析, SAX流化, 对象转换, 或串行化, 各自作为独立导出 .

建于与 tXml 数据 由Tobias Nickel(英语:Tobias Nickel)所制作,Eksml改进了性能并扩展了附加功能.

尝试交互式演示

安装

pnpm add @eksml/xml
# or: npm install @eksml/xml / yarn add @eksml/xml

埃克斯姆尔是 仅限无害环境管理 并需要Node.js 18+(或任何现代浏览器,Deno,或Bun). 没有通用JS出口.

分析

parse() 将 XML 字符串转换成一系列的平面对象节点 :

import { parse } from '@eksml/xml/parser';

const dom = parse('<feed><item id="1">Hello</item></feed>');
// [
//   {
//     tagName: 'feed',
//     attributes: null,
//     children: [
//       { tagName: 'item', attributes: { id: '1' }, children: ['Hello'] },
//     ],
//   },
// ]

每一个元素都是 TNode, (中文(简体) ), { tagName, attributes, children },文本是一个简单的字符串。 这是整个树型, 它是JSON的系列 并且安全的克隆.

更喜欢用简单的物体而不是树? 直接转换 :

import { lossy } from '@eksml/xml/lossy';

lossy('<user><name>Alice</name><age>30</age></user>');
// => { user: { name: 'Alice', age: '30' } }

见 解析 用于所有选项(HTML模式、严格模式、实体解码、目标提取)和 转换器 用于丢失和无损对象格式.

写入

write() 将树(或丢失/ 丢失的对象, 自动检测) 序列化为字符串 :

import { write } from '@eksml/xml/writer';

write(dom);
// => '<feed><item id="1">Hello</item></feed>'

write(dom, { pretty: true });
// => '<feed>\n  <item id="1">Hello</item>\n</feed>'

write({ user: { name: 'Alice' } });
// => '<user><name>Alice</name></user>'

见 写作 用于漂亮打印、实体编码、 HTML 输出和验证选项.

流线

对于太大的文档 存储,或数据到达网络, XmlParseStream 是一个标准网络 TransformStream 并释放出完成的子树:

import { XmlParseStream } from '@eksml/xml/stream';

const response = await fetch('/feed.xml');
const nodes = response.body
  .pipeThrough(new TextDecoderStream())
  .pipeThrough(new XmlParseStream({ select: 'item' }));

for await (const item of nodes) {
  console.log(item.tagName); // each <item> as soon as it closes
}

这个 select 选项会逐一释放匹配元素,而不是等待整个文档。 在浏览器、Node.js 18+、 Deno 和 Bun 工作; 节点流桥与 Readable.toWeb()。 。 。 .

如果您想要原始事件而不是树(或最大吞吐量), 也有一个事件Emitter风格的 SAX 解析器 :

import { createSaxParser } from '@eksml/xml/sax';

const parser = createSaxParser();
parser.on('openTag', (tagName, attributes) => console.log(tagName));
parser.write('<feed><item id="1">');
parser.write('Hello</item></feed>');
parser.close();

见 网络流 财务报告和审定财务报表 SAX 解析器 用于选项、输出格式和节点流接口.

文档

专题 封面
分析 parse(),所有选项 TNode 树型、严格模式、实体解码、定向取出
写入 write(),漂亮打印,实体编码,验证,输入自动检测
网页流 XmlParseStream,则 select 选项、 输出格式、 块缓冲、 节点接口
SAX 解析器 createSaxParser(),事件,动态处理器,使用节点流
转换器 lossy(), (中文(简体) ), lossless(),形状规则,回转 XML
公用事业 filter(), (中文(简体) ), getElementById(), (中文(简体) ), getElementsByClassName(),类型守护, HTML 常数
HTML 支持 什麽 html: true 在每一个 API 中执行,在 Eksml 停止缺少符合 spec 的 HTML 解析器时执行
警卫 原型污染和循环参考保护,为何亿取笑和XXE不适用
限制 没有 DTD/ schema 验证, 没有命名空间分辨率, 没有 XPath, 以及工作环

基准

Eksml 始终是 DOM 解析、 SAX 流化和原始符号化 中最快的 JavaScript 库, 并引导序列化 validate: false. 完整的每个固定结果: 银行。 。 。 .

还有一个 交互式基准 在您的浏览器中运行。 它与BENCHMARKS.md是一个单独的套房:它只包括运行在网络上的库,并使用自有固定装置(或用XML你粘贴来),因此其数字不具有直接可比性.

承认

Eksml的DOM解析器是建立在 托比亚斯镍 他的电话 tXml 数据 图书馆。 核心解析架构,一个单行道,位置跟踪的字符串扫描仪,可以随行地构建树,是使得两个库都如此快. 托比亚斯,谢谢你的优雅方法 使这一切成为可能.

许可证

麻省理工学院

版本与发布记录

@eksml/xml 共发布 9 个版本,首次发布于 2026/04/06;过去 12 个月发布了 9 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.3.0latest2026/10/2024 天前
0.2.02026/07/203 个月前
0.1.62026/07/203 个月前
0.1.52026/07/203 个月前
0.1.42026/07/193 个月前
0.1.32026/07/193 个月前

关于 @eksml/xml 的常见问题

@eksml/xml 是什么?

快速轻量级XML/HTML 解析器、序列器和流线工具包

如何安装 @eksml/xml?

在项目目录运行 npm install @eksml/xml,或使用 pnpm add / yarn add / bun add。

@eksml/xml 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@eksml/xml 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@eksml/xml 可以商用吗?

@eksml/xml 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@eksml/xml 的下载量有多少?

根据 npm 官方下载统计,@eksml/xml 在 2026/10/13 – 2026/11/11 这 30 天内被下载 12,111 次,日均约 404 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@eksml/xml 还在维护吗?

最新版本 0.3.0 发布于 2026/10/20(24 天前);至今共发布 9 个版本,其中过去 12 个月发布了 9 个;首次发布于 2026/04/06。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。