引入crate:
xml-doc = {version = "*"}
read and write
use xml_doc::{Document, Element};
let mut xml = r#"<?xml version="1.0"?>
<package xmlflag="http://purl.org/dc/element/1.1/">
<metadata>
<title>xml-doc</title>
<rights>MIT or Apache</rights>
</metadata>
</package>
"#.to_string();
let xml_file_name = "d:\\test.xml";
if try_exists(xml_file_name).await? {
let content = std::fs::read_to_string(xml_file_name)?;
xml = content;
}
let mut doc = Document::parse_str(&xml).unwrap();
let package = doc.root_element().unwrap();
let mut attrs = package.attributes(&doc);
for(k, v) in attrs{
println!("all attrs:{} = {}", k, v);//attrs.get(k).unwrap()
}
println!("dc = {:?}", attrs.get("xmlflag").unwrap());
let metadata = package.find(&mut doc, "metadata").unwrap();
let title_node = metadata.find(&doc, "title").unwrap();
println!("title_node.text={}", title_node.text_content(&doc));
let author = Element::build(&mut doc, "creator")
.text_content("henreash")
.attribute("id", "001")
.push_to(metadata);
let new_xml = doc.write_str();
println!("{:?}", new_xml);
std::fs::write(xml_file_name, new_xml.unwrap().as_bytes()).unwrap();