Expand description
xmlparser is a low-level, pull-based, zero-allocation XML 1.0 parser.
Example
for token in xmlparser::Tokenizer::from("<tagname name='value'/>") {
println!("{:?}", token);
}
Why a new library?
This library is basically a low-level XML tokenizer that preserves the positions of the tokens and is not intended to be used directly. If you are looking for a higher level solution, check out roxmltree.
Benefits
- All tokens contain
StrSpan
structs which represent the position of the substring in the original document. - Good error processing. All error types contain the position (line:column) where it occurred.
- No heap allocations.
- No dependencies.
- Tiny. ~1400 LOC and ~30KiB in the release build according to
cargo-bloat
. - Supports
no_std
builds. To use without the standard library, disable the default features.
Limitations
- Currently, only ENTITY objects are parsed from the DOCTYPE. All others are ignored.
- No tree structure validation. So an XML like
<root><child></root></child>
or a string without root element will be parsed without errors. You should check for this manually. On the other hand<a/><a/>
will lead to an error. - Duplicated attributes is not an error. So XML like
<item a="v1" a="v2"/>
will be parsed without errors. You should check for this manually. - UTF-8 only.
Safety
- The library must not panic. Any panic is considered a critical bug and should be reported.
- The library forbids unsafe code.
Structs
- A string slice.
- A streaming XML parsing interface.
- Position in text.
- Tokenizer for the XML structure.
Enums
ElementEnd
token.- Representation of the EntityDef value.
- An XML parser errors.
- Representation of the ExternalID value.
- Representation of the Reference value.
- A stream parser errors.
- An XML token.
Traits
- Extension methods for XML-subset only operations.
- Extension methods for XML-subset only operations.