You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
release: prepare 0.4.1 with FFI parity, binding improvements, docs sync
Add Schematron and CSS selector support to C FFI, bringing it to parity
with Rust/Python/WASM. Add tree mutation APIs to WASM binding. Add CSS
selectors to Python binding. Expand benchmarks with validation, XPath,
and CSS suites. Add 58 CSS evaluator tests and 10 FFI tests. Fix README
which incorrectly listed Schematron as unsupported and XPath as 1.0 only.
Update MIGRATION.md with HTML5, Schematron, and CSS migration examples.
Copy file name to clipboardExpand all lines: CLAUDE.md
+35-6Lines changed: 35 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@
4
4
5
5
**xmloxide** is a pure Rust reimplementation of libxml2 — the de facto standard XML/HTML parsing library in the open-source world. libxml2 became officially unmaintained in December 2025 with known security issues. xmloxide is a memory-safe, high-performance replacement that passes the same conformance test suites.
6
6
7
-
**Version:** 0.4.0
7
+
**Version:** 0.4.1
8
8
**License:** MIT
9
9
**MSRV:** Rust 1.81+
10
10
@@ -13,11 +13,15 @@
13
13
- Full conformance with W3C XML 1.0 (Fifth Edition) and Namespaces in XML 1.0
14
14
-**1727/1727** W3C XML Conformance Test Suite tests passing (100%)
-**WHATWG HTML5 parser** — full HTML Living Standard tokenizer (§13.2.5) and tree builder (§13.2.6) with 7032/7032 tokenizer tests + 1778/1778 tree construction tests passing (100% html5lib-tests)
18
+
-**CSS selector engine** — query elements with familiar CSS syntax including combinators and pseudo-classes
19
+
-**Serde integration** — optional XML (de)serialization to/from Rust types via serde
20
+
-**Async parsing** — optional async parsing from `tokio::io::AsyncRead` sources
18
21
- Zero `unsafe` in public API surface (`unsafe_code = "deny"` in Cargo.toml)
19
22
- No system dependencies — pure Rust (uses `encoding_rs` for character encoding)
20
23
- C/C++ FFI layer with header file (`include/xmloxide.h`)
24
+
- WASM bindings (`xmloxide-wasm`) and Python bindings (`pyxmloxide`)
21
25
-`xmllint` CLI tool
22
26
- Performance competitive with libxml2 (serialization 1.5-2.3x faster)
23
27
@@ -67,7 +71,13 @@ src/
67
71
│ ├── mod.rs # WHATWG HTML5 parser public API and module docs
68
72
│ ├── tokenizer.rs # HTML5 tokenizer (all 80 states per §13.2.5)
69
73
│ ├── tree_builder.rs # HTML5 tree construction (all insertion modes per §13.2.6)
74
+
│ ├── sax.rs # HTML5 SAX-like streaming API (no DOM tree)
70
75
│ └── entities.rs # HTML5 named character references (§13.5, 2231 entries)
76
+
├── css/
77
+
│ ├── mod.rs # CSS selector public API (select, select_with)
78
+
│ ├── parser.rs # CSS selector parser
79
+
│ ├── types.rs # Selector AST types
80
+
│ └── eval.rs # Selector evaluator against document trees
71
81
├── sax/
72
82
│ └── mod.rs # SAX2 handler trait and streaming parser
73
83
├── reader/
@@ -80,7 +90,8 @@ src/
80
90
│ ├── lexer.rs # XPath expression tokenizer
81
91
│ ├── parser.rs # XPath expression parser → AST
82
92
│ ├── eval.rs # Expression evaluator against a node tree
0 commit comments