v0.4.0
Breaking release — ground-up rewrite of the internals: token-based parser, Cursor streaming (StAX-style) API, XPath subset, configurable well-formedness. Upgrading from 0.3.x? See the migration guide.
Added
Cursor— allocation-light forward streaming (next!,for_each_child,skip_element!).xpath(node, path)— an XPath 1.0 subset.wellformed = :lenient | :structural | :strictonparse/read(default:structural).XMLTokenizerstreaming tokenizer; AbstractTrees package extension.
Changed
Nodeis parametric (Node{S}), attributes areVector{Pair}behind anattributesaccessor.parse/readdecode entities (value()returns&, not&);writeauto-escapes.- Inter-element whitespace is preserved as
Textnodes; duplicate attributes error; malformed documents are rejected by default (:lenientrestores the permissive behavior). - Minimum Julia is 1.10. Substantially faster and leaner than 0.3.x — see PERFORMANCE-v0.4.md.
Removed
- The 0.3 streaming internals:
XML.Raw,next/prev, single-argumentparent/depth,nodes_equal,escape!/unescape!,DTDBody— replacements in the migration guide.
Full details: CHANGELOG.