# sax 中文文档

规范地址：https://npmcn.com/package/sax/

版本：1\.6\.1
npm 元数据更新时间：2026-07-24T18:50:24.946Z
中文译文更新时间：2026-11-05T15:12:04.729Z
软件包许可：BlueOak-1\.0\.0

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

原始 npm 页面：https://www.npmjs.com/package/sax
原文对照：https://npmcn.com/package/sax/?lang=original
项目主页：https://github.com/isaacs/sax-js#readme
源码仓库：https://github.com/isaacs/sax-js

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

- 包体积（解压后）：61.7 kB，4 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=11\.0\.0
- 运行依赖：0 个
- 首次发布：2011-02-09T19:13:51.969Z
- 最新版本发布：2026-07-24T18:50:24.821Z
- 近 30 天下载量：435356940（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：54（近 12 个月 4 个）

## 中文简介

JavaScript 中一个事件流化的 XML 解析器

## 安装

```sh
npm install sax
```

也可以使用：`pnpm add sax`、`yarn add sax`、`bun add sax`

## README

# 萨克斯 js

XML 和 HTML 的sax 风格解析器 .

设计与 [节点](http://nodejs.org/) 记住,但应该很好 浏览器或其他普通JS执行.

## 这是什么

-   一个通过 XML 字符串解析的非常简单的工具.
-   向流式 HTML 解析器跳动的石块 .
-   处理RSS和其他大多是OK-但kind-broked XML的方便方法 医生.

## 这大概不是

-   HTML 解析器 - 这是一个很好的目标, 但这不是它。 这只是 XML (英语).
-   DOM 构建器 - 您可以用它从 XML 中构建对象模型, 但它并没有做到这一点 出盒子.
-   XSLT - 无 DOM = 无查询.
-   100%与(一些其他SAX执行)兼容——大多数SAX 执行在Java中,并且做的比这要多得多.
-   XML 验证器 - 它在严格模式下做一些验证,但是 没什么.
-   一个 Schema- Aware XSD 软件 {\\fn华文楷体\\fs16\\1cHE0E0E0}什么? {\\fn华文楷体\\fs16\\1cHE0E0E0}Schemas是迷信运动 受虐狂风行.
-   一个DTD感知到的东西 - 获取DTD是更大的工作.

## 关于 `<!DOCTYPE`s 和 `<!ENTITY`编号

解析器将在文本节点和属性中处理基本的 XML 实体 值 : `&amp; &lt; &gt; &apos; &quot;`。可以定义额外的 在 XML 中,将它们放入 DTD 。 这个解剖师什么也做不了 与那个。 如果你想听的话 `ondoctype` 事件,然后获取 文档类型,并读取实体并添加到 `parser.ENTITIES`,则 请便.

未知实体在严格模式下会失败, 在松散模式下会通过 穿过未爆出.

## 使用量

```javascript
var sax = require('./lib/sax'),
  strict = true, // set to false for html-mode
  parser = sax.parser(strict)

parser.onerror = function (e) {
  // an error happened.
}
parser.ontext = function (t) {
  // got some text.  t is the string of text.
}
parser.onopentag = function (node) {
  // opened a tag.  node has "name" and "attributes"
}
parser.onattribute = function (attr) {
  // an attribute.  attr has "name" and "value"
}
parser.onend = function () {
  // parser stream is done, and ready to have more stuff written to it.
}

parser.write('<xml>Hello, <who name="world">world</who>!</xml>').close()

// stream usage
// takes the same options as the parser
var saxStream = require('sax').createStream(strict, options)
saxStream.on('error', function (e) {
  // unhandled errors will throw, since this is a proper node
  // event emitter.
  console.error('error!', e)
  // clear the error
  this._parser.error = null
  this._parser.resume()
})
saxStream.on('opentag', function (node) {
  // same object as above
})
// pipe is supported, and it's readable/writable
// same chunks coming in also go out.
fs.createReadStream('file.xml')
  .pipe(saxStream)
  .pipe(fs.createWriteStream('file-copy.xml'))
```

## 参数

将以下参数传递到 parser 函数 。 这些都是可选的.

`strict` -布尔 是否要成为一个混蛋。 默认 : `false`。 。 。 .

`opt` - 关于字符串格式化的设置对象包。 全部默认为 `false`。 。 。 .

支持设置 :

-   `trim` -布尔 是否修剪文本和注释节点 .
-   `normalize` -布尔 如果真实, 那么将任何空白变为单个 空间.
-   `lowercase` -布尔 如果真实, 那么小写标记名称和属性名称 在松散模式下,而不是在他们上方.
-   `xmlns` -布尔 如果为真,则支持命名空间 .
-   `position` -布尔 如果错误,那么不要跟踪行/行/位置.
-   `strictEntities` -布尔 如果真实, 只分析 [预定义 XML 实体](http://www.w3.org/TR/REC-xml/#sec-predefined-ent) (单位:千美元)`&amp;`, (中文(简体) ), `&apos;`, (中文(简体) ), `&gt;`, (中文(简体) ), `&lt;`,以及 `&quot;`(中文(简体) )
-   `unquotedAttributeValues` -布尔 如果是真的,那就不用引用 属性值被允许。 默认为 `false` 何时 `strict` 没错, `true` 否则.

## 方法

`write` - 把字节写到溪上 你不必这样 一次 一次吗 随所取故能作是念已.

`close` - 关闭溪流。 一旦关闭,将不再撰写数据,直到 它完成处理缓冲器,它由 `end` 活动.

`resume` - 为了优雅地处理错误, 指派一个听众到 `error` 活动。 然后,当错误得到处理, 你可以打电话 `resume` 改为 继续解析。 否则,解析器在错误中不会继续 状态.

## 成员

解析器对象在任何时候都会有以下成员:

`line`, (中文(简体) ), `column`, (中文(简体) ), `position` - 说明XML中的立场 文档.

`startTagPosition` - 显示当前标签的起始位置.

`closed` - 布尔表示解析器是否可以写入 . 如果是这样 `true`,然后等待时间 `ready` 再次写入的事件.

`strict` - 布尔表示解析器是不是个混蛋.

`opt` - 任何选择权传入建筑师.

`tag` - 目前的标签正在处理中.

还有一堆你可能不该碰的东西.

## 活动

所有的事件都以单一的论据发出. 要听事件,请指定 函数改为 `on<eventname>`。函数在此 解析器对象。 所支持的事件清单也在导出中 `EVENTS` 阵列.

当使用流界面时, 使用 EventEmiter 指定处理器 `on` 以正常方式运行.

`error` - 表明发生了坏事 错误将挂起 继续 `parser.error`,在解析可以继续之前必须删除。 以 听听这个事件,你可以注意那些东西。 说明: 发生这种事 _多数_ 更严格的方式。 参数: `Error`。 。 。 .

`text` - 文字节点 辩:字行.

`doctype` - 那个 `<!DOCTYPE` 声明。 辩:道克类型字符串.

`processinginstruction` - 喜欢的东西 `<?xml foo="blerg" ?>`。参数: 对象为 `name` 财务报告和审定财务报表 `body` 成员。 未解析属性, 如 处理指令有执行依赖语义.

`sgmldeclaration` - 随机的SGML声明。 喜欢的东西 `<!ENTITY p>` 会引发这样的事件。 这是奇怪的事情支持,所以它 可能会在某个时候离开。 SAX不是用来分析SGML的, 毕竟.

`opentagstart` - 当标签名称可用时立即发出, 但是在遇到任何属性之前 参数:带有a的对象 `name` 字段和一个空 `attributes` 设置。 请注意,这是 与以后在 `opentag` 活动.

`opentag` - 一个开口标签。 参数: 对象 `name` 财务报告和审定财务报表 `attributes`。 。 。 . 在非限制性模式下,标签名称被大写,除非 `lowercase` 选项已设置。 如果 `xmlns` 选项已设定,然后将包含 名称空间绑定信息 `ns` 成员,并将有一个 `local`, (中文(简体) ), `prefix`,以及 `uri` 成员.

`closetag` - 一个关闭标记。 在松散模式下,如果标签 父关. 在严格模式下,实施完善的形态. 请注意: 自动关闭标签 `closeTag` 紧接着发射 `openTag`。 。 。 . 参数:标签名.

`attribute` - 一个属性节点。 参数: 对象 `name` 财务报告和审定财务报表 `value`。 。 。 . 在非限制性模式下,属性名称被大写,除非 `lowercase` 选项已设置。 如果 `xmlns` 选项,它也将包含命名空间 资料.

`comment` -一个评论节点 辩:注之弦.

`opencdata` - 一个开口的标签 `<![CDATA[` 块.

`cdata` - 一个文本 `<![CDATA[` 块。 自兹 `<![CDATA[` 块可以得到 相当大,如果一个街区,这个事件可能多次开火 被分割成多个 `write()`s. 参数:随机的字符串 字符数据.

`closecdata` - 关闭标签(`]]>`页:1 `<![CDATA[` 块.

`opennamespace` - 如果说 `xmlns` 选项已设定,然后此事件将 表示开始一个新的命名空间绑定.

`closenamespace` - 如果说 `xmlns` 选项已设定,然后此事件将 表示命名空间绑定的结束.

`end` - 说明封闭的溪流已经结束了.

`ready` - 说明溪流已重置,并准备写作 改为:.

`noscript` - 在非限制性模式下, `<script>` 标记触发 a `"script"` 事件,其内容不检查特殊的 xml 字符. 如果你通过了 `noscript: true`,然后这种行为被压制.

## 报告问题

如果你发现问题 最好写个失败的测试 我会永远 如果检测失败,则接受拉动请求 行为,但很难理解 你在描述什么问题 没有测试。 写试卷也是你最好的选择 找出你是否真正理解你认为你的问题 萨克斯js.

## 常见问题

### sax 是什么？

JavaScript 中一个事件流化的 XML 解析器

### 如何安装 sax？

在项目目录运行 npm install sax，或使用 pnpm add / yarn add / bun add。

### sax 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/sax 是否存在。

### sax 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### sax 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=11\.0\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### sax 可以商用吗？

sax 使用 BlueOak-1\.0\.0 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### sax 的下载量有多少？

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

### sax 还在维护吗？

最新版本 1\.6\.1 发布于 2026/07/25（3 个月前）；至今共发布 54 个版本，其中过去 12 个月发布了 4 个；首次发布于 2011/02/10。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

