uploaded 11 months ago
Tiny event-driven XML parser

readme

# saxml
Embedded XML Parser

[![Build Status](https://travis-ci.org/zorxx/saxml.svg?branch=master)](https://travis-ci.org/zorxx/saxml)

saxml is a truly small event-driven XML parser designed for use in embedded/microcontroller applications.

Since saxml is a SAX XML parser (see https://en.wikipedia.org/wiki/Simple_API_for_XML), the parser has a very small memory footprint (there's no XML document stored on the heap). Instead, the XML document is streamed to the parser a single character at a time. As the parser encounters interesting events (such as a start tag, end tag, attribute, etc.), the parser executes callback functions which are registered by the calling application. This allows the calling application to perform application-specific operations based on XML parsing events.

The parse depth and heirarchy can easily be maintained by an application through the use of a stack; push the tag name on the stack each time a tagHandler event is handled and pop the top element off the stack each time a tagEndHandler event is handled.

See the test subdirectory for a simple example application. `saxml.h` includes a detailed description of the API.

saxml performs no validation of the XML document

### Example #1 (test.xml)

XML Document: 
```xml
<begin  > 
<second_begin>
<nothing_much/>
 content
</second_begin>
</begin>
```
Callbacks executed:

```
tagHandler: 'begin'
tagHandler: 'second_begin'
tagHandler: 'nothing_much'
tagEndHandler: 'nothing_much'
contentHandler: 'content
'
tagEndHandler: 'second_begin'
tagEndHandler: 'begin'

```

### Example #2 (test2.xml)

XML Document: 
```xml
<begin  > 
<second_begin yes no="hello">
<nothing_much/>content</second_begin>
more content goes here
</begin>
```

Callbacks executed:
```
tagHandler: 'begin'
tagHandler: 'second_begin'
attributeHandler: 'yes'
attributeHandler: 'no="hello"'
tagHandler: 'nothing_much'
tagEndHandler: 'nothing_much'
contentHandler: 'content'
tagEndHandler: 'second_begin'
contentHandler: 'more content goes here
'
tagEndHandler: 'begin'
```

### Example #3 (test3.xml)

XML Document: 
```xml
<begin  > 
   <second_begin yes no="hello">
      <nothing_much attribute_in_small_tag />
      <another_begin>
      </another_begin>
   </second_begin>
   more content goes here
</begin>
```

Callbacks executed:
```
tagHandler: 'begin'
tagHandler: 'second_begin'
attributeHandler: 'yes'
attributeHandler: 'no="hello"'
tagHandler: 'nothing_much'
attributeHandler: 'attribute_in_small_tag'
tagEndHandler: ' '
tagHandler: 'another_begin'
tagEndHandler: 'another_begin'
tagEndHandler: 'second_begin'
contentHandler: 'more content goes here
'
tagEndHandler: 'begin'
```
Note that, in this example, the tagEndHandler is called with a single-character string parameter for the empty tag (nothing_much) that contains an attribute. This is an ideosyncrasy of the SAX parser, since the empty tag's name isn't stored by the parser, in order to save heap usage.

Links

Supports all targets

License: MIT

To add this component to your project, run:

idf.py add-dependency "zorxx/saxml^1.0.0"

or download archive

Stats

  • Downloaded in total
    Downloaded in total 6 times
  • Downloaded this version
    This version: 4 times

Badge

zorxx/saxml version: 1.0.0
|