8 releases
0.3.2 | Nov 25, 2022 |
---|---|
0.3.1 | Oct 27, 2022 |
0.2.2 | Jun 7, 2022 |
0.2.1 | May 21, 2022 |
0.1.0 | Mar 18, 2022 |
#12 in #xpath
78KB
1.5K
SLoC
Rust-Etree
XML DOM library with XPath support.
Usage
Put this in your Cargo.toml
:
[dependencies]
etree = "0.1"
use etree::*;
use std::path::Path;
fn create_xml<P:AsRef<Path>>(path:P) {
let mut tree:ETree = ETree::from(ETreeNode::new("ROOT"));
tree.set_encoding("UTF-8");
tree.set_standalone("no");
let root_pos = tree.root();
// append first child
let mut child1:ETreeNode = ETreeNode::new("CHILD-A");
child1.set_attr("DEST", "CHN");
let child1_pos = tree.append_child_node(root_pos, child1).unwrap();
// append another child after first child
let mut child2:ETreeNode = ETreeNode::new("CHILD-B");
child2.set_text("Shanghail");
tree.append_next_node(child1_pos, child2);
// append another child before first child
let mut child3:ETreeNode = ETreeNode::new("CHILD-C");
child3.set_attr("DEST", "CHN");
child3.set_text("Shanghail");
tree.append_previous_node(child1_pos, child3);
// append a child in the first child
let mut child4:ETreeNode = ETreeNode::new("SUBCHILD-A");
child4.set_text("EAST");
let pos = tree.find("//CHILD-A").unwrap(); // after inserting child3, child1_pos becomes invaild
tree.append_child_node(pos, child4);
tree.pretty("\n ");
tree.write_file(path).ok();
}
fn modify_xml<P:AsRef<Path>>(path_in:P, path_out:P) {
let mut tree = ETree::parse_file(path_in);
let subtree_pos = tree.find("//CHILD-A").unwrap();
let mut subtree = tree.subtree(subtree_pos);
let subtree_child_pos = subtree.find("/SUBCHILD-A").unwrap();
if let Some(node) = subtree.node_mut(subtree_child_pos) {
node.set_text("WEST");
}
// tree.append_next_tree(subtree_pos, subtree.clone());
let parent_pos = tree.parent(subtree_pos).unwrap();
tree.append_child_tree(parent_pos, subtree);
tree.write_file(path_out).ok();
}
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option.Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~4.5–6MB
~109K SLoC