xml-doc 0.2.0

Read, modify and write xml in tree-like structure. Supports UTF-16.
Documentation
use xml_doc::{Document, Element, Node};

#[test]
fn test_escape() {
    let expected = r#"<?xml version="1.0" encoding="UTF-8"?>
<root attr="&gt;&lt;&amp;&quot;&apos;attrval">
  <inner xmlns:ns="&gt;&lt;&amp;&quot;&apos;nsval">&gt;&lt;&amp;&quot;&apos;text</inner>
</root>
<!--<&amp;--><![CDATA[<&amp;]]><!DOCTYPE &lt;&amp;amp;>
<?<&amp;?>"#;
    let mut doc = Document::new();
    let container = doc.container();
    let root = Element::build(&mut doc, "root")
        .attribute("attr", "><&\"'attrval")
        .push_to(container);
    Element::build(&mut doc, "inner")
        .namespace_decl("ns", "><&\"'nsval")
        .text_content("><&\"'text")
        .push_to(root);
    doc.push_root_node(Node::Comment("<&amp;".to_string()))
        .unwrap();
    doc.push_root_node(Node::CData("<&amp;".to_string()))
        .unwrap();
    doc.push_root_node(Node::DocType("<&amp;".to_string()))
        .unwrap();
    doc.push_root_node(Node::PI("<&amp;".to_string())).unwrap();
    let xml = doc.write_str().unwrap();

    assert_eq!(xml, expected);
}