xml 6.3.0 icon indicating copy to clipboard operation
xml: ^6.3.0 copied to clipboard

A lightweight library for parsing, traversing, querying, transforming and building XML documents.

Changelog #

6.3.0 #

  • Upgrade to Dart 2.19 and PetitParser 5.4.
  • Add XmlElement.tag constructor that greatly simplifies the creation of elements, i.e. XmlElement(XmlName('br'), [], [], true) becomes XmlElement.tag('br', isSelfClosing: true).
  • Deprecate the ambiguous XmlNode.text: Replace with XmlNode.value to access the textual contents of the node, or XmlNode.innerText to access the textual contents of its descendants.
  • Fix XmlNode.siblings and various related methods to also work correctly on XmlAttribute nodes, make the method return a mutable list.
  • Improve XmlNode.replace(XmlNode) and add XmlNode.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.0 #

  • Upgrade to PetitParser 5.1 brings a 10% speed improvement (typed sequences).
  • Add the ability to tap into a stream of XmlEvent with tapEachEvent (similar to forEachEvent).
  • Remove XmlName equality operator == and hashCode. This is inconsistent with the other DOM nodes, and the provided implementation might not have the desired behavior.
  • Improved error reporting when accessing innerText or innerXml on DOM nodes that cannot have children.

6.1.0 #

  • 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 XmlDoctype can now be accessed through name, externalId and internalSubset.

6.0.0 #

  • 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 XmlTransformer as it requires dynamic calls in the XmlVisitor.
    • Cleanup the dynamic typing of XmlVisitor.
  • XmlBuilder keeps keeps correct nesting, even in case of exceptions.
  • Remove deprecated code:
    • parse(String input): use XmlDocument.parse(String input) or XmlDocumentFragment.parse(String input) instead.
    • XmlBuilder.build(): use XmlBuilder.buildDocument() or XmlBuilder.buildFragment() instead.
    • XmlNormalizer.defaultInstance: use const XmlNormalizer() instead.
    • XmlProductionDefinition, XmlGrammarDefinition, and XmlParserDefinition.

5.4.0 #

  • 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, namespacePrefix and namespaceUri for convenience on the named nodes.

5.3.0 #

  • Dart 2.15 requirement.
  • Upgrade to PetitParser 4.3.

5.2.0 #

  • A series of read-only accessors that simplify navigating the XML DOM with XmlElements:
    • Add XmlNode.childElements.
    • Add XmlNode.siblings and XmlNode.siblingElements.
    • Add XmlNode.previousElementSibling and XmlNode.nextElementSibling.
    • Add XmlNode.ancestorElements, XmlNode.precedingElements, XmlNode.descendantElements, and XmlNode.followingElements.

5.1.1 #

  • Fix printing of Exceptions.
  • Fix parsing of DOCTYPE tags.

5.1.0 #

  • Upgrade to PetitParser 4.1.0.

5.0.0 #

  • Dart 2.12 requirement and null-safety.
  • Add the possibility to XmlBuilder to add raw strings.
  • Improve error reporting (particularly for fragment parsing).
  • Default entity mapping is now a global setting.
  • Improve tutorials and documentation.

4.5.0 #

  • Fixed a bug in the XML name parsing where certain unicode planes were not correctly recognized.
  • Removed const constructor from XmlEvent to be able to add a lazy initialized parentEvent field.
  • Add XmlWithParentEvents that provides validation of event nesting and efficient access to the parent events. Use stream.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.0 #

  • Add a XmlSubtreeSelector that allows efficient filtering of events in specific sub-trees. Use stream.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.

4.3.0 #

  • Improve error reporting of XmlBuilder and add possibility to build XmlDocumentFragments.
  • Improvements to documentation and examples.

4.2.0 #

  • Deprecate standalone XmlDocument parse(String input) method, and introduce factory methods in the respective nodes XmlDocument.parse(String input) and XmlDocumentFragment.parse(String input).
  • Introduce getters and setters for XmlNode.innerText (in most cases an alias to XmlNode.text), XmlNode.innerXml and XmlNode.outerXml.
  • Improved support for XmlDocumentFragment across the library.
  • Remove the XmlDocument.text override, which returned null.
  • 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.firstElementChild and XmlNode.lastElementChild to 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.

4.1.0 #

  • Improve the pretty printing and the customization of the pretty printing:
    • XmlWriter and XmlPrettyWriter are 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 setAttribute and removeAttribute.
  • Improved the documentation, particularly started a section on xml_events package.

4.0.0 #

  • Cleanup the node hierarchy. Specifically removed XmlOwned and XmlParent that added a lot of complexity and confusion. Instead, introduced dedicated mixins for nodes with attributes (XmlHasAttributes), children (XmlHasChildren), names (XmlHasName) or parents (XmlHasParent).
  • Introduce XmlDeclaration nodes, events and builder to make accessing XML version and encoding simpler.

3.7.0 #

  • Update to PetitParser 3.0.0.
  • Dart 2.7 compatibility and requirement.

3.6.0 #

  • 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 XmlParserError a FormatException to follow typical Dart exception style.
  • Add an example demonstrating the interaction with HTTP APIs.

3.5.0 #

  • 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.0 #

  • 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.0 #

  • New events based parsing in xml_events:
    • Lazy event parsing from an XML string into an Iterable of XmlEvent.
    • Async converters between streams of XML, XmlEvent and XmlNode.
  • 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.

3.2.4 #

  • Remove unnecessary whitespace when printing self-closing tags.
  • Remember if an element is self-closing for stable printing.

3.2.0 #

  • Migrated to PetitParser 2.0

3.1.0 #

  • Drop Dart 1.0 compatibility
  • Cleanup, optimization and improved documentation
  • Add experimental support for SAX parsing

3.0.0 #

  • Mutable DOM
  • Cleaned up documentation
  • Dart 2.0 strong mode compatibility
  • Reformatted using dartfmt

2.6.0 #

  • Fix CDATA encoding
  • Migrate to micro libraries
  • Fixed linter issues

2.5.0 #

  • Generic Method syntax with Dart 1.21

2.4.5 #

  • Do no longer use ArgumentError, but instead use proper exceptions.

2.4.4 #

  • Fixed attribute escaping
  • Preserve single and double quotes

2.4.3 #

  • Improved documentation

2.4.2 #

  • Use enum as the node type

2.4.1 #

  • Fixed attribute escaping

2.4.0 #

  • Fixed linter issues
  • Cleanup node hierarchy

2.3.2 #

  • Improved documentation

2.3.1 #

  • Improved test coverage

2.3.0 #

  • Improved comments
  • Optimize namespaces

2.2.2 #

  • Formatted source

2.2.1 #

  • Cleanup pretty printing

2.2.0 #

  • Improved comments
296
likes
140
pub points
100%
popularity

Publisher

verified publisher iconlukas-renggli.ch

A lightweight library for parsing, traversing, querying, transforming and building XML documents.

Repository (GitHub)

Documentation

API reference

License

Icon for licenses.MIT (LICENSE)

Dependencies

collection, meta, petitparser

More

Packages that depend on xml