PackageTrack
Sign in Get early access

roxmltree

Represent an XML as a read-only tree.

0.21.1 67M downloads/mo #1036 most downloaded on crates.io RazrFalcon/roxmltree

What this package is like to depend on

Last release 10 months ago

12 Oct 2025

Release timing varies

gaps range from 8 days to 1.4 years

Nearly every release is documented

notes for 31 of 32 stable releases

2 versions withdrawn

withdrawn after publishing

8 years old

34 releases · first in 2018

2 releases in the last 12 months

see the full history below

Release timeline

34 releases · Aug 2018 to Oct 2025
2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 34
  1. 0.21.1 12 Oct 2025
    Release notes

    Also upgrade it from FnMut to Fn as borrowing entities from elsewhere…

    Open source →
    Release notes

    Fixed

    • Remove implict 'static lifetime bound on EntityResolver dyn trait type alias.
    • Upgrade EntityResolver dyn trait type alias from FnMut to Fn to resolve lifetime issues.
    Open source →
  2. 0.21.0 04 Oct 2025 withdrawn
    Release notes

    Fix benchmark build, update changelog and bump version.

    Open source →
    Release notes

    Added

    • ParsingOptions::entity_resolver can be used to resolve external entities referenced via public ID and URI.

    Changed

    • Node::has_attribute, Node::attribute and Node::attribute_node match local names similar to how Node::has_tag_name works.
    • Various internal performance improvements, e.g. devirtualization of token dispatch and usage of memchr for finding delimiters.

    Fixed

    • Possible panic when entity resolution yields unbalanced tags.
    • Quadratic runtime when merging consecutive text nodes.
    Open source →
  3. 0.20.0 23 May 2024
    Release notes

    Added

    • Attribute::range, Attribute::range_qname, Attribute::range_value. Thanks to @Jayonas

    Changed

    • Attribute::position is deprecated now.
    • The positions build feature uses a bit more memory now to better preserve attribute ranges.
    Open source →
  4. 0.19.0 18 Nov 2023
    Release notes

    Changed

    • xmlparser is no longer a dependency and its fork is used internally.
    • ~5% faster parsing.
    • Fallback to Rc when Arc isn't available.
    • Bump MSRV to 1.60
    • Bump edition to 2021
    • Error variants have changed quite a lot.
    • XML declaration validation was simplified. We no longer check for attributes content. Meaning that version, encoding and standalone can contain any value now. But we still do check attribute names and order.<br/> And while we did validated those attributes before, they weren't really affecting the parser in any way. Therefore the parsing behavior is mostly unchanged.

    Fixed

    • ParsingOptions::allow_dtd = false would not trigger an error when an empty DTD was present.

    Removed

    • The xmlparser dependency.
    Open source →
  5. 0.18.1 30 Sep 2023
    Release notes

    Added

    Fixed

    • Replace \r in CDATA as well.
    • no_std build. Thanks to @wenyuzhao
    Open source →
  6. 0.18.0 04 Feb 2023
    Release notes

    Added

    • StringStorage that exposes an internal string storage.
    • Allocated strings are stored as Arc<str> and not String now.
    • Node::text_storage
    • Node::tail_storage
    • Attribute::value_storage
    • Node::range

    Removed

    • Node::position. Use Node::range instead.

    Fixed

    Open source →
  7. 0.17.0 06 Jan 2023
    Release notes

    Added

    • Stored namespaces are deduplicated now, which can reduce memory usage on large files up to 10%. Thanks to @adamreichold

    Changed

    • Node::namespaces returns an iterator and not a slice now.

    Fixed

    Open source →
  8. 0.16.0 21 Nov 2022
    Release notes

    Drop attrs_start_idx and use drain when resolving attributes.

    Open source →
    Release notes

    Added

    • positions build feature.
    • Node::position
    • Attribute::position
    • ParsingOptions::nodes_limit to limit the maximum number of nodes to parse.

    Changed

    • Peak memory usage reduces by up to 20% depending on an input. Thanks to @adamreichold and @tomjw64.
    • Node::attributes returns an iterator and not a slice now.

    Removed

    • 4GB input limit.
    • Do not store Node and Attribute end range in the original document.
    • Do not store attribute value range in the original document.
    • Node::range. Use position instead.
    • Attribute::range. Use position instead.
    • Attribute::value_range
    Open source →
  9. 0.15.1 18 Oct 2022
    Release notes

    Fixed

    • Bump xmlparser to prevent stack overflow on some input.
    Open source →
  10. 0.15.0 15 Aug 2022
    Release notes

    Changed

    • Extend Document::descendants lifetime. Thanks to @DBLouis.
    • Derive Eq and Hash for NodeId.
    • Remove pretty_assertions dev-dependency.
    • MSRV is now 1.36
    Open source →
  11. 0.14.1 01 Apr 2021
    Release notes

    Changed

    • The std feature is enabled by default now.
    Open source →
  12. 0.14.0 27 Dec 2020
    Release notes

    Added

    • An ability to reject XML with DTD in it.
    • The library is no_std + alloc now.
    • ParsingOptions
    • Document::parse_with_options
    • Error::DtdDetected
    Open source →
  13. 0.13.1 19 Dec 2020
    Release notes

    Added

    • Debug for all public types.
    Open source →
  14. 0.13.0 20 Jun 2020
    Release notes

    Changed

    • Better ExpandedName lifetimes. Thanks to @eduardosm.
    Open source →
  15. 0.12.0 20 Jun 2020
    Release notes

    Changed

    • Re-release 0.11.1, since it had a breaking change.
    Open source →
  16. 0.11.1 19 Jun 2020 withdrawn
    Release notes

    Changed

    • Extend ExpandedName lifetime. Thanks to @rkusa.
    Open source →
  17. 0.11.0 19 Apr 2020
    Release notes

    Added

    • Implement Ord, PartialOrd and Hash for Node. Thanks to [@tomjw64].
    • NodeId, Document::get_node and Node::id. Thanks to [@tomjw64].

    Changed

    • The input data size is limited by 4GiB now.
    • Node can be accessed from multiple threads now.
    • Reduce Node memory usage.
    • Greatly optimized Descendants iterator. Up to 5x faster in some cases. Thanks to [@tomjw64].
    • Heavily reduce memory usage when document has a lot of namespaces. Thanks to [@tomjw64].

    Removed

    • Node::traverse, Traverse and Edge. Use Node::descendants instead.
    Open source →
  18. 0.10.1 28 Mar 2020
    Release notes

    Fixed

    • Node::prev_sibling_element and Node::next_sibling_element were returning the current node.
    Open source →
  19. 0.10.0 18 Mar 2020
    Release notes

    Added

    • Document::input_text

    Changed

    • Ancestors, PrevSiblings, NextSiblings, FirstChildren and LastChildren were replaced with AxisIter.

    Fixed

    • Root node range.
    Open source →
  20. 0.9.1 09 Feb 2020
    Release notes

    Changed

    • A better entity loop detection. A document can have an unlimited number of references at zero depth now.
    Open source →
  21. 0.9.0 07 Jan 2020
    Release notes

    Changed

    • Moved to Rust 2018.
    • xmlparser updated.
    Open source →
  22. 0.8.0 21 Dec 2019
    Release notes

    Added

    • Error::MalformedEntityReference

    Changed

    • Malformed entity reference is an error now.
    • Escaped < in attribute inside an ENTITY is an error now.
    • xmlparser updated with multiple fixes.
    Open source →
  23. 0.7.3 13 Nov 2019
    Release notes

    Changed

    • Use unconstrained lifetimes for the attribute functions. By myrrlyn.
    Open source →
  24. 0.7.2 07 Nov 2019
    Release notes

    Changed

    • Use longer lifetimes in Document::root_element. By myrrlyn.
    Open source →
  25. 0.7.1 14 Sep 2019
    Release notes

    Changed

    • Update xmlparser.
    Open source →
  26. 0.7.0 06 Aug 2019
    Release notes

    Added

    • Node::prev_sibling_element and Node::next_sibling_element.

    Changed

    • (breaking) Node::ancestors includes the current node now.
    • Attribute is cloneable now.

    Fixed

    • Namespaces resolving with equal URI's.

    Removed

    • Node::resolve_tag_name_prefix.
    Open source →
  27. 0.6.1 18 Jun 2019
    Release notes

    Fixed

    • Namespace resolving.
    Open source →
  28. 0.6.0 03 Mar 2019
    Release notes

    Added

    • Error::UnknownNamespace.

    Fixed

    • Unknown namespace prefixes will cause an error now.
    Open source →
  29. 0.5.0 27 Feb 2019
    Release notes

    Added

    • Node::range.
    • Node::attribute_node.
    • Attribute::range.
    • Attribute::value_range.

    Changed

    • Rename text_pos_from into text_pos_at.

    Removed

    • Node::pos. Use Node::range instead.
    • Node::node_pos. Use doc.text_pos_at(node.range().start) instead.
    • Node::attribute_pos.
    • Node::attribute_value_pos.
    • Attribute::pos. Use Attribute::range instead.
    • Attribute::value_pos. Use Attribute::value_range instead.
    Open source →
  30. 0.4.1 02 Jan 2019
    Release notes

    Changed

    • Use longer lifetimes in return types. By tmiasko.
    Open source →
  31. 0.4.0 13 Dec 2018
    Release notes

    Added

    • Error::pos().
    Open source →
  32. 0.3.0 29 Oct 2018
    Release notes

    Changed

    • Store text nodes as &str when possible. On an XML with a lot of simple text can be ~2x faster.
    • Document no longer implements PartialEq.

    Fixed

    • Entity and character references resolving inside a text.
    Open source →
  33. 0.2.0 08 Oct 2018
    Release notes

    Added

    • Error::EntityReferenceLoop.
    • Nested entity references support.

    Changed

    • Attribute::namespace will return Option now.
    • ExpandedName::namespace will return Option now.
    • Namespace::name will return Option now.
    • Node::resolve_tag_name_prefix will return Option now.
    • Node::lookup_namespace_uri accepts Option<&str> and not &str now.
    • Performance optimizations.

    Removed

    • ExpandedName::has_namespace. ExpandedName::namespace will return Option now.
    • Error::NestedEntityReference.
    Open source →
  34. 0.1.0 31 Aug 2018

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive