A very fast SAX parser for Node.js written in C++. Native module for performance reason.
yarn add @tuananh/sax-parser
# npm install @tuananh/sax-parser
I use the benchmark.js
script from node-expat repo and add few more alternatives for comparison.
ltx
package is fastest, win by almost 2 (~1.8) order of magnitude compare with the second fastest (@tuananh/sax-parser
). However, ltx
is not fully compliant with XML spec. I still include ltx
here for reference. If ltx
works for you, use it.
npm run benchmark
sax x 14,277 ops/sec ±0.73% (87 runs sampled)
@tuananh/sax-parser x 45,779 ops/sec ±0.85% (85 runs sampled)
node-xml x 4,335 ops/sec ±0.51% (86 runs sampled)
node-expat x 13,028 ops/sec ±0.39% (88 runs sampled)
ltx x 81,722 ops/sec ±0.73% (89 runs sampled)
libxmljs x 8,927 ops/sec ±1.02% (88 runs sampled)
Fastest is ltx
module | ops/sec | native | XML compliant | stream |
---|---|---|---|---|
node-xml | 4,335 | ☐ | ✘ | ✘ |
libxmljs | 8,927 | ✘ | ✘ | ☐ |
node-expat | 13,028 | ✘ | ✘ | ✘ |
sax | 14,277 | ☐ | ✘ | ✘ |
@tuananh/sax-parser | 45,779 | ✘ | ✘ | ✘ |
ltx | 81,722 | ☐ | ☐ | ✘ |
ops/sec: higher is better.
- See
example/print.js
for an example how to use this library to pretty print XML toprocess.stdout
. - Or
example/stream.js
for an example of using this library with stream. - For complete API documentation, see API.md.
Sample usage
const fs = require('fs')
const path = require('path')
const SaxParser = require('..')
const parser = new SaxParser()
const readStream = fs.createReadStream(
path.join(__dirname, '/../benchmark/test.xml')
)
readStream
.pipe(parser)
.on('startElement', (name, attrs) => {
console.log('name', name)
})
.on('text', (text) => {
console.log('text', text)
})
.on('end', () => {
console.log('done')
})
You will need to have all node-gyp
's requirements installed.
git clone git@github.com:tuananh/sax-parser.git
cd sax-parser
git submodule init
npm install
npm run build
node example/print.js
npm run test
- engine-x: a fork of cocos2d-x game engine
- xsxml: The embedded xml SAX parser, extract from pugixml/rapidxml DOM parsers
- addon-event-emitter: How to create and use event emitter interface on Node.js add-ons
- addon-stream: How to use and create stream on Node.js native add-ons
- napi-example-transformstream: Simple transform stream implementation using node-addon-api
- Node.js C++ addon examples: Official Node.js C++ addon examples from Node.js