sup-xml 1.3.0

Modern idiomatic Rust API for SupXML
Documentation
fn fmt(xml: &str) -> String {
    let doc = sup_xml::parse_str(xml, &sup_xml::ParseOptions::default()).unwrap();
    sup_xml::serialize_with(&doc, &sup_xml::SerializeOptions {
        format: true,
        indent: "  ".into(),
        ..sup_xml::SerializeOptions::default()
    })
}
fn main() {
    let cases = [
        ("simple nested",
         "<r><a><b><c>x</c></b></a></r>"),
        ("mixed content",
         "<p>before <b>bold</b> middle <i>italic</i> after</p>"),
        ("comments + pis",
         "<r><!-- top --><a/><?pi data?><b/></r>"),
        ("CDATA",
         "<r><note><![CDATA[unparsed & raw]]></note></r>"),
        ("attrs + nesting",
         r#"<r id="1" class="x"><child name="foo" value="bar"/></r>"#),
        ("ws-only text between elements",
         "<r>   <a/>   <b/>   </r>"),
        ("text node only",
         "<r>hello</r>"),
        ("empty element",
         "<r><a/></r>"),
        ("deep nesting",
         "<a><b><c><d><e>deep</e></d></c></b></a>"),
    ];
    for (label, xml) in cases {
        println!("=== {} ===", label);
        println!("INPUT:\n{}", xml);
        println!("OUTPUT:\n{}", fmt(xml));
        println!();
    }
}