Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 1,000,000+ packages pre-installed, including node-xml-stream-parser with all npm packages installed. Try it out:

var nodeXmlStreamParser = require("node-xml-stream-parser")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

node-xml-stream-parser v1.0.12

A fast XML parser using streams.



  • A tiny simple and fast XML/HTML stream parser with an easy-to-use interface (using NodeJS streams)
  • A very effective (fast) way to detal with RSS/ATOM/RDF feeds

Copy from because of inactivity of Project


There are alot of good other xml/html parsers out there, this is just meant to be a tiny and easy to use stream-parser that is fast. It is a perfect match for use in feed parsers (e.g. ATOM/RSS/RDF)

If you need a parser that is more heavy-weight with more functionality I recommend node-sax

What does it do?

Reads XML/HTML streams fast and emitts events for:

  • Tag Openings (opentag) <tag attr="1.0">
  • Closing tags (closetag) </tag>
  • Self closing tags (closetag) <tag />
  • CDATA (cdata) <[[CDATA[data]]>
  • Instructions (instruction) <?xml version="1.0?>

All comments are ignored (not emitted). <!DOCTYPES, <!ENTITY are also ignored, I haven't found any real need for them yet parsing RSS/ATOM/RDF.

Important notice due some self closing tags do not have an empty space we strip the last / at the end of a tag name. So if your tag is named somthing/ it will not work.


Install via NPM using command:

npm install --save node-xml-stream


let Parser = require('node-xml-stream');
let fs = require('fs');

let parser = new Parser();

// <tag attr="hello">
parser.on('opentag', (name, attrs) => {
    // name = 'tag'
    // attrs = { attr: 'hello' }

// </tag>
parser.on('closetag', name => {
    // name = 'tag'

// <tag>TEXT</tag>
parser.on('text', text => {
    // text = 'TEXT'

// <[[CDATA['data']]>
parser.on('cdata', cdata => {
    // cdata = 'data'

// <?xml version="1.0"?>
parser.on('instruction', (name, attrs) => {
    // name = 'xml'
    // attrs = { version: '1.0' }

// Only stream-errors are emitted.
parser.on('error', err => {
    // Handle a parsing error

parser.on('finish', () => {
    // Stream is completed

// Write data to the stream.

// Pipe a stream to the parser
let stream = fs.createReadStream('./feed.atom');


#write(data) - write data to the stream.

#end()- end the stream

#on(event, handler) - Attach an eventhandler


All the default stream events for NodeJS streams and the below extra events that are emitted:

opentag - when a tag is opened { name, attributes }

closetag- When a tag is closed { name }

text - when text is retrieved { text }

cdata - when CDATA is read. { text }

instruction - When instruction is available { name, attributes }


Pull requests and stars always welcome. For bugs and feature requests, please create an issue.




RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free