xml
Full-featured XML for Dart — DOM parsing, SAX streaming, XPath 3 querying, and a fluent builder API.
7.0.1
1000K downloads/mo
#63 most downloaded on pub.dev
renggli/dart-xml
What this package is like to depend on
Last release 4 months ago
25 Apr 2026
Release timing varies
gaps range from 9 days to 1.5 years
Some releases are documented
notes for 42 of 88 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
90 releases · first in 2012
2 releases in the last 12 months
see the full history below
Release timeline
90 releases · Sep 2012 to Apr 2026Releases
latest 60 of 90-
7.0.125 Apr 2026Release notes
Open source →- Better namespace support across all parts of the library:
- Namespaces of
XmlDocument.parseandXmlDocumentFragment.parseare now resolved at parse-time and constant when manipulating the DOM (this aligns with other XML libraries and removes surprising behavior when moving nodes around). - Deprecate all
namespacearguments and replace them with the more intention revealingnamespaceUriandnamespacePrefix. - Lower-level parser and event APIs can now enable and disable the validation and resolution of namespaces with
validateNamespacesandwithNamespaces. This is a BREAKING CHANGE to existing code using these lower-level APIs, as namespaces are no longer available by default. - Introduced
XmlNamespaceExceptionfor error reporting of invalid namespaces. XmlNameis now immutable and the complexity with different states is gone.- Added
XmlNamespacenode type andXmlHasNamespacesmixin to support reading in-scope namespaces on nodes.
- Namespaces of
- Correctly move nodes from their previous parent when inserting them into a new location, rather than throwing an
XmlParentException. This aligns with standard DOM behavior and improves usability and performance.XmlDocumentFragmentnodes are automatically expanded and their children are moved as well. - Improved performance and usability of
XmlBuilder:- Significantly improve the performance of
XmlBuilderas all namespace lookups are now in constant time. - Deprecated
namespace(String uri, String? prefix)andnamespaces(Map<String, String?> uriToPrefix)accessors that have an unusually awkward API. Replaced withnamespaceUri(String? prefix, String? uri)andnamespaceUris(Map<String, String> prefixToUri)with a clear prefix-uri order. - Deprecated
String? namespacearguments when definition elements and attributes. Replaced with more flexibleString namespacePrefixandString namespaceUri.
- Significantly improve the performance of
- Comprehensive XPath 3.1 support:
- Complete execution model supporting sequences of items (nodes, atomic values, functions, maps, and arrays).
- New expressions and operators: String concatenation (
||), range (to), quantified (some/every), loops (for), simple map (!), lookup (?), and node comparison (is,<<,>>). - Support for Higher-Order Functions: Inline, named, and arrow functions, inclusive of partial function application and dynamic binding with
fn:function-lookup. - Native support for XPath Data Model (XDM) maps and arrays, including associated JSON and sequence functions.
- Added support for EQName parsing (
Q{uri}name). - Add missing XPath name tests (namespace prefix, namespace URI, local name, and wildcards) and node tests (
attribute(),document-node()andelement()). - Significantly improve XPath evaluation performance for large documents (thanks to laishere).
- Fix issues with XPath axis parsing, reverse axis access, and predicate expressions (thanks to laishere).
- Update to PetitParser 7.0.2.
- Better namespace support across all parts of the library:
-
7.0.025 Apr 2026Nothing published for this version
-
6.6.116 Aug 2025Release notes
Open source →- Dart and Flutter 3.9 compatibility.
- Minor optimization to eliminate unused namespaces.
-
6.6.015 Jun 2025Release notes
Open source →- Dart 3.8 and PetitParser 7.0 requirement.
- Correct decoding of names with surrogate characters.
-
6.5.002 Dec 2023Release notes
Open source →- Add support for most XPath 1.0 functions, including set-operations and ensuring document order for node-sets.
- Add support for XPath expression evaluation, user-defined variables, and user-defined functions.
- Add
XmlNode.xpathGenerateto create a readable XPath for all nodes. - Add support for node comparison:
XmlNode.isEqualNodeandXmlNode.compareNodePosition.
-
6.4.220 Aug 2023Nothing published for this version
-
6.4.120 Aug 2023Nothing published for this version
-
6.4.017 Aug 2023 -
6.3.024 Apr 2023Release notes
Open source →- Upgrade to Dart 2.19 and PetitParser 5.4.
- Add
XmlElement.tagconstructor that greatly simplifies the creation of elements, i.e.XmlElement(XmlName('br'), [], [], true)becomesXmlElement.tag('br', isSelfClosing: true). - Deprecate the ambiguous
XmlNode.text: Replace withXmlNode.valueto access the textual contents of the node, orXmlNode.innerTextto access the textual contents of its descendants. - Fix
XmlNode.siblingsand various related methods to also work correctly onXmlAttributenodes, make the method return a mutable list. - Improve
XmlNode.replace(XmlNode)and addXmlNode.remove()for easy removal of a node. - Improve error position propagation when building the XML DOM.
- Make the parser more forgiving when reading attributes.
- Experimental support of a subset of XPath.
- Add new-line normalization support.
-
6.2.210 Nov 2022 -
6.2.108 Nov 2022Nothing published for this version
-
6.2.023 Oct 2022Release notes
Open source →- Upgrade to PetitParser 5.1 brings a 10% speed improvement (typed sequences).
- Add the ability to tap into a stream of
XmlEventwithtapEachEvent(similar toforEachEvent). - Remove
XmlNameequality operator==andhashCode. This is inconsistent with the other DOM nodes, and the provided implementation might not have the desired behavior. - Improved error reporting when accessing
innerTextorinnerXmlon DOM nodes that cannot have children.
-
6.1.025 May 2022Release notes
Open source →- Dart 2.17 requirement.
- Validate the presence and order of root nodes when parsing; this got lost in 6.0.0 and can now also optionally be enabled for streaming and iterable parsers.
- Add support for basic document type parsing. The contents of the
XmlDoctypecan now be accessed throughname,externalIdandinternalSubset.
-
6.0.128 Mar 2022Nothing published for this version
-
6.0.028 Mar 2022Release notes
Open source →- Significantly improve parsing performance by up to 30%.
- Improved error handling to include more information, such as tag names and location in the parsed source.
- Use the pull-based parser for all underlying parsing operations:
- Reduce size of library by removing duplicated parsing and validation functionality.
- Fix entity decoding if the entity spawns multiple chunks.
- Cleanup dynamic calls and type declarations:
- Avoid all dynamic calls across the library (thanks to srawlins).
- Remove deprecated
XmlTransformeras it requires dynamic calls in theXmlVisitor. - Cleanup the dynamic typing of
XmlVisitor.
XmlBuilderkeeps keeps correct nesting, even in case of exceptions.- Remove deprecated code:
parse(String input): useXmlDocument.parse(String input)orXmlDocumentFragment.parse(String input)instead.XmlBuilder.build(): useXmlBuilder.buildDocument()orXmlBuilder.buildFragment()instead.XmlNormalizer.defaultInstance: useconst XmlNormalizer()instead.XmlProductionDefinition,XmlGrammarDefinition, andXmlParserDefinition.
-
5.4.119 Mar 2022Nothing published for this version
-
5.4.018 Mar 2022Release notes
Open source →- Dart 2.16 requirement.
- Update to PetitParser 5.0.
- Escape control characters (thanks to rspilker).
- Add a predicate to pretty printer to insert a space character before self-closing elements (thanks to rspilker).
- Add predicates to normalizer to trim leading and trailing whitespaces, as well as collapse consecutive whitespaces.
- Expose
qualifiedName,localName,namespacePrefixandnamespaceUrifor convenience on the named nodes.
-
5.3.116 Oct 2021Nothing published for this version
-
5.3.010 Sep 2021 -
5.2.014 Aug 2021Release notes
Open source →- A series of read-only accessors that simplify navigating the XML DOM with
XmlElements:- Add
XmlNode.childElements. - Add
XmlNode.siblingsandXmlNode.siblingElements. - Add
XmlNode.previousElementSiblingandXmlNode.nextElementSibling. - Add
XmlNode.ancestorElements,XmlNode.precedingElements,XmlNode.descendantElements, andXmlNode.followingElements.
- Add
- A series of read-only accessors that simplify navigating the XML DOM with
-
5.1.205 Jun 2021Nothing published for this version
-
5.1.120 May 2021 -
5.1.005 Apr 2021 -
5.0.219 Feb 2021Nothing published for this version
-
5.0.119 Feb 2021Nothing published for this version
-
5.0.017 Feb 2021Release notes
Open source →- Dart 2.12 requirement and null-safety.
- Add the possibility to
XmlBuilderto add raw strings. - Improve error reporting (particularly for fragment parsing).
- Default entity mapping is now a global setting.
- Improve tutorials and documentation.
-
5.0.0-nullsafety.121 Nov 2020 pre-releaseNothing published for this version
-
4.5.117 Sep 2020Nothing published for this version
-
4.5.004 Sep 2020Release notes
Open source →- Fixed a bug in the XML name parsing where certain unicode planes were not correctly recognized.
- Removed const constructor from
XmlEventto be able to add a lazy initializedparentEventfield. - Add
XmlWithParentEventsthat provides validation of event nesting and efficient access to the parent events. Usestream.withParentEvents()to annotate the stream accordingly. - Add namespace resolution to events through
event.namespaceUri. Note that the data is only available when the parent information is present (see above). - Fix namespace resolutions for events in selected sub-tree nodes, even if the namespace declaration is not part of the visible DOM.
- Add
stream.forEachEvent(onText: ...)for easier callback based stream processing.
-
4.4.118 Aug 2020Nothing published for this version
-
4.4.016 Aug 2020Release notes
Open source →- Add a
XmlSubtreeSelectorthat allows efficient filtering of events in specific sub-trees. Usestream.selectSubtreeEvents(...)to filter the stream accordingly. - Add more options to XML pretty printer, namely the possibility to sort and indent attributes.
- Add typed extension methods for all stream converters, for simpler and more fluent API.
- Improvements to documentation and examples.
- Add a
-
4.3.018 Jul 2020Release notes
Open source →- Improve error reporting of
XmlBuilderand add possibility to buildXmlDocumentFragments. - Improvements to documentation and examples.
- Improve error reporting of
-
4.2.029 May 2020Release notes
Open source →- Deprecate standalone
XmlDocument parse(String input)method, and introduce factory methods in the respective nodesXmlDocument.parse(String input)andXmlDocumentFragment.parse(String input). - Introduce getters and setters for
XmlNode.innerText(in most cases an alias toXmlNode.text),XmlNode.innerXmlandXmlNode.outerXml. - Improved support for
XmlDocumentFragmentacross the library. - Remove the
XmlDocument.textoverride, which returnednull. - Add
XmlNode.replace(XmlNode other)to make it easier to replace nodes in an existing tree. - Add
XmlNode.getElement(String name)as a shortcut to find the first child element with a given name. - Add
XmlNode.firstElementChildandXmlNode.lastElementChildto easy access the first/last child element. - Add support to selectively disable whitespace normalization while pretty-printing, for example
document.toXmlString(pretty: true, preserveWhitespace: (node) => node is XmlElement && node.name.local == 'pre')would keep everything within<pre>tags as-is.
- Deprecate standalone
-
4.1.030 Mar 2020Release notes
Open source →- Improve the pretty printing and the customization of the pretty printing:
XmlWriterandXmlPrettyWriterare now initialized with optional arguments.- Pretty printing now also supports to customize the newline support.
- Example is updated to also syntax highlight / colorize the output.
- Add full namespace support to attribute accessors
setAttributeandremoveAttribute. - Improved the documentation, particularly started a section on
xml_eventspackage.
- Improve the pretty printing and the customization of the pretty printing:
-
3.7.001 Jan 2020 -
3.6.110 Dec 2019Nothing published for this version
-
3.6.030 Nov 2019Release notes
Open source →- Entity decoding and encoding is now configurable with an
XmlEntityMapping. All operations that read or write XML can now (optionally) be configured with an entity mapper. - The default entity mapping used only maps XML entities, as opposed to all HTML entities as in
previous versions. To get the old behavior use
XmlDefaultEntityMapping.html5. - Made
XmlParserErroraFormatExceptionto follow typical Dart exception style. - Add an example demonstrating the interaction with HTTP APIs.
- Entity decoding and encoding is now configurable with an
-
3.5.010 May 2019Release notes
Open source →- Dart 2.3 compatibility and requirement.
- Turn various abstract classes into proper mixins.
- Numerous documentation improvements and code optimizations.
- Add an event parser example.
-
3.4.107 Mar 2019Nothing published for this version
-
3.4.027 Feb 2019Release notes
Open source →- Dart 2.2 compatibility and requirement.
- Take advantage of PetitParser fast-parse mode:
- 15-30% faster DOM parsing, and
- 15-50% faster event parsing.
- Improve error messages and reporting.
-
3.3.128 Jan 2019Nothing published for this version
-
3.3.024 Jan 2019Release notes
Open source →- New events based parsing in
xml_events:- Lazy event parsing from an XML string into an
IterableofXmlEvent. - Async converters between streams of XML,
XmlEventandXmlNode.
- Lazy event parsing from an XML string into an
- Clean up package structure by moving internal packages into the
src/subtree. - Remove the experimental SAX parser, the event parser allows more flexible streaming XML consumption.
- New events based parsing in
-
3.2.508 Jan 2019Nothing published for this version
-
3.2.407 Jan 2019Release notes
Open source →- Remove unnecessary whitespace when printing self-closing tags.
- Remember if an element is self-closing for stable printing.
-
3.2.327 Sep 2018Nothing published for this version
-
3.2.227 Sep 2018Nothing published for this version
-
3.2.115 Sep 2018Nothing published for this version
-
3.2.001 Aug 2018 -
3.0.121 Jul 2018Nothing published for this version
-
3.0.010 Mar 2018Release notes
Open source →- Mutable DOM
- Cleaned up documentation
- Dart 2.0 strong mode compatibility
- Reformatted using dartfmt
-
3.0.0-alpha19 Dec 2017 pre-releaseNothing published for this version
-
2.6.004 Aug 2017 -
2.5.019 Dec 2016 -
2.4.424 Nov 2016 -
2.4.305 Apr 2016 -
2.4.207 Mar 2016 -
2.4.117 Jan 2016 -
2.4.006 Oct 2015 -
2.3.215 May 2015 -
2.3.115 May 2015