0.2.2 • Published 9 years ago
xml-lexer v0.2.2
Features
- Very small, fast and simple! (~250 sloc)
- Event driven API (SAX-like)
- Works in Browser, WebWorkers, ServiceWorkers, Node.js or React Native
- Fault tolerant
- Handles CDATA
- Easy to extend and fine tune (state machine is exposed in Lexer instances)
If you are looking for a XML Reader/Parser to convert XML documents into Javascript objects, check my other projects:
Install
npm install --save xml-lexer
Examples
Happy case
const lexer = require('xml-lexer').create();
const xml =
`<hello color="blue">
<greeting>Hello, world!</greeting>
</hello>`;
lexer.on('data', (data) => console.log(data));
lexer.write(xml);
/*
Console output:
{ type: 'open-tag', value: 'hello' }
{ type: 'attribute-name', value: 'color' }
{ type: 'attribute-value', value: 'blue' }
{ type: 'open-tag', value: 'greeting' }
{ type: 'data', value: 'Hello, world!' }
{ type: 'close-tag', value: 'greeting' }
{ type: 'close-tag', value: 'hello' }
*/
Chunked processing
const lexer = require('xml-lexer').create();
const chunk1 = `<hello><greet`; // note this
const chunk2 = `ing>Hello, world!</greeting></hello>`;
lexer.on('data', (data) => console.log(data));
lexer.write(chunk1);
lexer.write(chunk2);
/*
Console output:
{ type: 'open-tag', value: 'hello' }
{ type: 'open-tag', value: 'greeting' }
{ type: 'data', value: 'Hello, world!' }
{ type: 'close-tag', value: 'greeting' }
{ type: 'close-tag', value: 'hello' }
*/
Document with errors
const lexer = require('xml-lexer').create();
lexer.on('data', (data) => console.log(data));
lexer.write(`<<hello">hi</hello attr="value">`);
/*
Console output (note the open-tag value):
{ type: 'open-tag', value: '<hello"' }
{ type: 'data', value: 'hi' }
{ type: 'close-tag', value: 'hello' }
*/
Update state machine to fix document errors
const Lexer = require('xml-lexer');
const lexer = Lexer.create();
lexer.stateMachine[Lexer.State.tagBegin][Lexer.Action.lt] = () => {};
lexer.stateMachine[Lexer.State.tagName][Lexer.Action.error] = () => {};
lexer.on('data', (data) => console.log(data));
lexer.write(`<<hello">hi</hello attr="value">`);
/*
Console output (note the fixed open-tag value):
{ type: 'open-tag', value: 'hello' }
{ type: 'data', value: 'hi' }
{ type: 'close-tag', value: 'hello' }
*/
License
MIT
0.2.2
9 years ago
0.2.1
9 years ago
0.1.1
9 years ago
0.2.0
9 years ago
0.1.0
9 years ago
0.0.17
10 years ago
0.0.16
10 years ago
0.0.15
10 years ago
0.0.14
10 years ago
0.0.13
10 years ago
0.0.12
10 years ago
0.0.11
10 years ago
0.0.10
10 years ago
0.0.9
10 years ago
0.0.8
10 years ago
0.0.7
10 years ago
0.0.6
10 years ago
0.0.5
10 years ago
0.0.4
10 years ago
0.0.3
10 years ago
0.0.2
10 years ago
0.0.1
10 years ago