xmlparser 0.1.0

Pull-based, zero-allocation XML parser.
Documentation

libxmlparser Build Status

libxmlparser is a low-level, pull-based, zero-allocation XML 1.0 parser.

Table of Contents

Documentation

Example

extern crate xmlparser;

use xmlparser::FromSpan;

for token in xmlparser::Tokenizer::from_str("<tagname name='value'/>") {
    println!("{:?}", token);
}

Why a new library

The main idea of this library is to provide a fast, low-level and complete XML parser.

Unlike other XML parsers, this one can return tokens not with &str/&[u8] data, but with StrSpan objects, which contain a position of the data in the original document. Which can be very useful if you want to post-process tokens even more and want to return errors with a meaningful position.

So, this is basically an XML parser framework that can be used to write parsers for XML-based formats, like SVG and to construct a DOM.

At the time of writing the only option was quick-xml (v0.10), which does not support DTD and token positions.

Detailed comparison with other XML parsers can be found at choose-your-xml-rs.

Benefits

  • Tokens contain StrSpan objects, that contains a position of the data in the original document.
  • Supports basic text escaping with xml:space (should be invoked manually). A properer text escaping is very hard without a DOM construction.
  • Good error processing. All error types contain position (line:column) where it occurred.
  • No heap allocations.

Limitations

  • Currently, only ENTITY objects are parsed from the DOCTYPE. Other ignored.
  • No namespaces. Still, they are mostly useless without a DOM.
  • UTF-8 only.

Safety

  • The library should not panic. Any panic considered as a critical bug and should be reported.
  • The library forbids unsafe code.

Usage

Dependency: Rust >= 1.13 (>= 1.15 for testing)

Add this to your Cargo.toml:

[dependencies]
xmlparser = "0.1"

License

libxmlparser is licensed under the MIT.