From 5c30f8e99863c01afbe3ea53b0d36715d6a47213 Mon Sep 17 00:00:00 2001
From: Juan Sebastian Valencia Londono
<¨valencialondonojuansebastian@gmail.com¨>
Date: Wed, 15 Jul 2026 10:05:30 -0500
Subject: [PATCH 1/4] chore: register parse_string example in Cargo.toml
---
crates/tinyxml2/Cargo.toml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/crates/tinyxml2/Cargo.toml b/crates/tinyxml2/Cargo.toml
index 698d23f..728135f 100644
--- a/crates/tinyxml2/Cargo.toml
+++ b/crates/tinyxml2/Cargo.toml
@@ -29,6 +29,11 @@ name = "parse_file"
path = "../../examples/parse_file.rs"
required-features = ["std"]
+[[example]]
+name = "parse_string"
+path = "../../examples/parse_string.rs"
+required-features = ["std"]
+
[[example]]
name = "build_dom"
path = "../../examples/build_dom.rs"
From 66876bd6b17d8691f9176e8237a93af8ed24fa53 Mon Sep 17 00:00:00 2001
From: Juan Sebastian Valencia Londono
<¨valencialondonojuansebastian@gmail.com¨>
Date: Wed, 15 Jul 2026 11:44:08 -0500
Subject: [PATCH 2/4] chore: add parse_string example with XmlError pattern
matching
---
examples/parse_string.rs | 44 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
create mode 100644 examples/parse_string.rs
diff --git a/examples/parse_string.rs b/examples/parse_string.rs
new file mode 100644
index 0000000..6a67f13
--- /dev/null
+++ b/examples/parse_string.rs
@@ -0,0 +1,44 @@
+//! Parses malformed XML strings and demonstrates how to handle different
+//! [`XmlError`] variants with pattern matching.
+
+use tinyxml2::{Document, XmlError};
+
+fn main() {
+ try_parse("", "mismatched tags");
+ try_parse("", "empty document");
+ try_parse("", "unclosed tag");
+}
+
+fn try_parse(xml: &str, desc: &str) {
+ match Document::parse(xml) {
+ Ok(_doc) => {
+ // Successful parse
+ }
+ Err(e) => {
+ println!("--- {desc} ---");
+ println!(" error: {e}");
+ match &e {
+ XmlError::EmptyDocument => {
+ println!(" cause: the input contains no XML content");
+ }
+ XmlError::MismatchedElement {
+ expected,
+ found,
+ line,
+ } => {
+ println!(" cause: expected {expected}>, found {found}> at line {line}");
+ }
+ XmlError::Parse { kind, line, message } => {
+ println!(" cause: {kind:?} error at line {line}");
+ if let Some(msg) = message {
+ println!(" detail: {msg}");
+ }
+ }
+ _ => {
+ println!(" cause: unexpected error — {e}");
+ }
+ }
+ println!();
+ }
+ }
+}
From cc893352096a400443ef355b72cfc3de32fee9b6 Mon Sep 17 00:00:00 2001
From: Juan Sebastian Valencia Londono
<¨valencialondonojuansebastian@gmail.com¨>
Date: Wed, 15 Jul 2026 11:46:08 -0500
Subject: [PATCH 3/4] chore: add parse_string.rs error handling example
---
crates/tinyxml2/Cargo.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/crates/tinyxml2/Cargo.toml b/crates/tinyxml2/Cargo.toml
index 728135f..d627e71 100644
--- a/crates/tinyxml2/Cargo.toml
+++ b/crates/tinyxml2/Cargo.toml
@@ -30,7 +30,7 @@ path = "../../examples/parse_file.rs"
required-features = ["std"]
[[example]]
-name = "parse_string"
+name = "parse_string_error_handling"
path = "../../examples/parse_string.rs"
required-features = ["std"]
From 3ab820ba5a25b770c71bf5f5afa3627fe38953d2 Mon Sep 17 00:00:00 2001
From: Juan Sebastian Valencia Londono
<¨valencialondonojuansebastian@gmail.com¨>
Date: Wed, 15 Jul 2026 11:52:37 -0500
Subject: [PATCH 4/4] fix: fix cargo fmt errors
---
examples/parse_string.rs | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/examples/parse_string.rs b/examples/parse_string.rs
index 6a67f13..2e73487 100644
--- a/examples/parse_string.rs
+++ b/examples/parse_string.rs
@@ -28,7 +28,11 @@ fn try_parse(xml: &str, desc: &str) {
} => {
println!(" cause: expected {expected}>, found {found}> at line {line}");
}
- XmlError::Parse { kind, line, message } => {
+ XmlError::Parse {
+ kind,
+ line,
+ message,
+ } => {
println!(" cause: {kind:?} error at line {line}");
if let Some(msg) = message {
println!(" detail: {msg}");