# @eksml/xml 中文文档

规范地址：https://npmcn.com/package/%40eksml/xml/

版本：0\.3\.0
npm 元数据更新时间：2026-10-20T14:19:21.805Z
中文译文更新时间：2026-11-13T10:18:46.476Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40eksml/xml
原文对照：https://npmcn.com/package/%40eksml/xml/?lang=original
项目主页：https://github.com/evoactivity/eksml#readme
源码仓库：https://github.com/evoactivity/eksml

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：646 kB，66 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2026-04-05T16:44:50.604Z
- 最新版本发布：2026-10-20T14:19:21.349Z
- 近 30 天下载量：12111（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：9（近 12 个月 9 个）

## 中文简介

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

## 安装

```sh
npm install @eksml/xml
```

也可以使用：`pnpm add @eksml/xml`、`yarn add @eksml/xml`、`bun add @eksml/xml`

## README

![Eksml](https://raw.githubusercontent.com/evoactivity/eksml/main/logo.svg)

# 埃克斯姆尔

[![CI](https://github.com/evoactivity/eksml/actions/workflows/ci.yml/badge.svg)](https://github.com/evoactivity/eksml/actions/workflows/ci.yml) [![coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/evoactivity/a81d2cb6fcee7165ffe898a8cfff9f4c/raw/eksml-coverage.json)](https://github.com/evoactivity/eksml/actions/workflows/ci.yml) [![npm](https://img.shields.io/npm/v/@eksml/xml)](https://www.npmjs.com/package/@eksml/xml) [![license](https://img.shields.io/npm/l/@eksml/xml)](https://github.com/evoactivity/eksml/blob/main/LICENSE)

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

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

**[尝试交互式演示](https://evoactivity.github.io/eksml/)**

## 安装

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

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

## 分析

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

```ts
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的系列 并且安全的克隆.

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

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

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

见 [解析](https://github.com/evoactivity/eksml/blob/main/docs/parsing.md) 用于所有选项(HTML模式、严格模式、实体解码、目标提取)和 [转换器](https://github.com/evoactivity/eksml/blob/main/docs/converters.md) 用于丢失和无损对象格式.

## 写入

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

```ts
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>'
```

见 [写作](https://github.com/evoactivity/eksml/blob/main/docs/writing.md) 用于漂亮打印、实体编码、 HTML 输出和验证选项.

## 流线

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

```ts
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 解析器 :

```ts
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();
```

见 [网络流](https://github.com/evoactivity/eksml/blob/main/docs/web-streams.md) 财务报告和审定财务报表 [SAX 解析器](https://github.com/evoactivity/eksml/blob/main/docs/sax-parser.md) 用于选项、输出格式和节点流接口.

## 文档

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

## 基准

Eksml 始终是 DOM 解析、 SAX 流化和原始符号化 中最快的 JavaScript 库, 并引导序列化 `validate: false`. 完整的每个固定结果: **[银行](https://github.com/evoactivity/eksml/blob/main/eksml/BENCHMARKS.md)**。 。 。 .

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

## 承认

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

## 许可证

麻省理工学院

## 常见问题

### @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 和提交记录判断。

