# xml-lexer

> XML Lexer

Latest version **0.2.2** (published 2016-09-24) · MIT license · 0 weekly downloads

## Install

```sh
npm install xml-lexer
pnpm add xml-lexer
yarn add xml-lexer
bun add xml-lexer
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.2 |
| Published | 2016-09-24 |
| First published | 2016-03-25 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 15 |
| Author | Pedro Ladaria |
| Maintainers | pladaria |
| Keywords | xml, lexer, lex, sax, grammar, state machine |

## Links

- npm: https://www.npmjs.com/package/xml-lexer
- Repository: https://github.com/pladaria/xml-lexer
- Homepage: https://github.com/pladaria/xml-lexer#readme
- Issues: https://github.com/pladaria/xml-lexer/issues
- npm.io page: https://npm.io/package/xml-lexer

## Dependencies (1)

- [eventemitter3](https://npm.io/package/eventemitter3.md) ^2.0.0

## Alternatives

- [babylon](https://npm.io/package/babylon.md) — 5.1M weekly downloads
- [csscolorparser](https://npm.io/package/csscolorparser.md) — 3.7M weekly downloads
- [expr-eval-fork](https://npm.io/package/expr-eval-fork.md) — 1.5M weekly downloads
- [@leeoniya/ufuzzy](https://npm.io/package/@leeoniya/ufuzzy.md) — 247.7K weekly downloads
- [xml-parser](https://npm.io/package/xml-parser.md) — 78.4K weekly downloads

## Recent versions

- 0.2.2 (latest) — 2016-09-24
- 0.2.1 — 2016-08-29
- 0.2.0 — 2016-08-27
- 0.1.0 — 2016-08-12
- 0.0.17 — 2016-03-29
- 0.0.16 — 2016-03-27
- 0.0.15 — 2016-03-27
- 0.0.14 — 2016-03-26
- 0.0.13 — 2016-03-26
- 0.0.12 — 2016-03-26
- 0.0.11 — 2016-03-26
- 0.0.10 — 2016-03-26
- 0.0.9 — 2016-03-26
- 0.0.8 — 2016-03-26
- 0.0.7 — 2016-03-26
- … 6 more at https://npm.io/package/xml-lexer/versions

## README

<p align="center">
  <img src="https://raw.githubusercontent.com/pladaria/xml-lexer/master/logo.png" alt="XML-Lexer"/>
</p>
<p align="center">
  Simple JavaScript Lexer for XML documents
</p>

## 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](https://github.com/pladaria/xml-reader), check my other projects:
- [xml-reader](https://github.com/pladaria/xml-reader)
- [xml-query](https://github.com/pladaria/xml-query)

## Install

```bash
npm install --save xml-lexer
```

## Examples

### Happy case

```javascript
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

```javascript
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

```javascript
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

```javascript
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

---
_Source: https://npm.io/package/xml-lexer · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
