///! Some utility functions use minidom::Element; /// Walks an XML tree and returns every element that has the given name pub fn find_elems>(root: &Element, searched_name: S) -> Vec<&Element> { let searched_name = searched_name.as_ref(); let mut elems: Vec<&Element> = Vec::new(); for el in root.children() { if el.name() == searched_name { elems.push(el); } else { let ret = find_elems(el, searched_name); elems.extend(ret); } } elems } /// Walks an XML tree until it finds an elements with the given name pub fn find_elem>(root: &Element, searched_name: S) -> Option<&Element> { let searched_name = searched_name.as_ref(); if root.name() == searched_name { return Some(root); } for el in root.children() { if el.name() == searched_name { return Some(el); } else { let ret = find_elem(el, searched_name); if ret.is_some() { return ret; } } } None } pub fn print_xml(element: &Element) { use std::io::Write; let mut writer = std::io::stdout(); let mut xml_writer = minidom::quick_xml::Writer::new_with_indent( std::io::stdout(), 0x20, 4 ); element.to_writer(&mut xml_writer); writer.write(&[0x0a]); }