Skip to content
This repository has been archived by the owner on Aug 27, 2022. It is now read-only.
/ sax-parser Public archive

An extremely fast SAX parser for Node.js written in C++

License

Notifications You must be signed in to change notification settings

tuananh/sax-parser

Repository files navigation

sax-parser npm version github actions ci travis ci license

need a logo, this is just sth i found on the web

What this is

A very fast SAX parser for Node.js written in C++. Native module for performance reason.

Installation

yarn add @tuananh/sax-parser
# npm install @tuananh/sax-parser

Benchmark

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.

Usage

  • See example/print.js for an example how to use this library to pretty print XML to process.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')
    })

Development

You will need to have all node-gyp's requirements installed.

git clone [email protected]:tuananh/sax-parser.git
cd sax-parser
git submodule init
npm install
npm run build
node example/print.js
npm run test

Credits