/saxen/
parser
A tiny, super fast, namespace aware sax-style XML parser written in plain JavaScript.
Features
- (optional) entity decoding and attribute parsing
- (optional) namespace aware
- element / attribute normalization in namespaced mode
- tiny (
4Kb
minified + gzipped)
Usage
var Parser = require('saxen');
var parser = new Parser();
parser.ns({
'http://foo': 'foo',
'http://bar': 'bar'
});
parser.on('openTag', function(elementName, attrGetter, decodeEntity, selfClosing, getContext) {
elementName;
var attrs = attrGetter();
});
parser.parse('<blub xmlns="http://foo" xmlns:bar="http://bar" bar:aa="A" />');
Supported Hooks
We support the following parse hooks:
openTag(elementName, attrGetter, decodeEntities, selfClosing, contextGetter)
closeTag(elementName, selfClosing, contextGetter)
error(err, contextGetter)
warn(warning, contextGetter)
text(value, decodeEntities)
cdata(value)
comment(value, decodeEntities)
attention(str, decodeEntities)
question(str)
In contrast to error
, warn
receives recoverable errors, such as malformed attributes.
Namespace Handling
In namespace mode, the parser will adjust tag and attribute namespace prefixes before
passing the elements name to openTag
or closeTag
. To do that, you need to
configure default prefixes for wellknown namespaces:
parser.ns({
'http://foo': 'foo',
'http://bar': 'bar'
});
To skip the adjustment and still process namespace information:
parser.ns();
Non-Features
/saxen/
lacks some features known in other XML parsers such as sax-js:
- no support for parsing loose documents, such as arbitrary HTML snippets
- no support for text trimming
- no automatic entity decoding
- no automatic attribute parsing
...and that is ok ❤.
Credits
We build on the awesome work done by easysax.
/saxen/
is named after Sachsen, a federal state of Germany. So geht sächsisch!
LICENSE
MIT