minidom: Include prefixes in serialization when using Element::from_reader_with_prefixes
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
parent
0cf06f0caf
commit
99f900558c
3 changed files with 27 additions and 1 deletions
|
|
@ -4,6 +4,8 @@ Version NEXT:
|
||||||
* Update rxml dependency to 0.13.
|
* Update rxml dependency to 0.13.
|
||||||
* Fixes
|
* Fixes
|
||||||
* Remove warnings for elided lifetimes (rustc 1.90)
|
* Remove warnings for elided lifetimes (rustc 1.90)
|
||||||
|
* Fixes serialization and ensure prefixes are set on Element when using
|
||||||
|
`Element::from_reader_with_prefixes`.
|
||||||
|
|
||||||
Version 0.16, released 2024-07-23:
|
Version 0.16, released 2024-07-23:
|
||||||
* Breaking
|
* Breaking
|
||||||
|
|
|
||||||
|
|
@ -1077,6 +1077,22 @@ mod tests {
|
||||||
assert_eq!(elem, elem2);
|
assert_eq!(elem, elem2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_from_reader_with_prefixes_serialization() {
|
||||||
|
let prefixes: BTreeMap<Option<String>, String> = {
|
||||||
|
let mut tmp = BTreeMap::new();
|
||||||
|
tmp.insert(None, String::from("foo"));
|
||||||
|
tmp.insert(Some(String::from("test")), String::from("bar"));
|
||||||
|
tmp
|
||||||
|
};
|
||||||
|
|
||||||
|
let input = r#"<foo test:attr="true"><bar/></foo>"#;
|
||||||
|
let output = r#"<foo xmlns='foo' xmlns:test='bar' test:attr='true'><bar/></foo>"#;
|
||||||
|
|
||||||
|
let elem = Element::from_reader_with_prefixes(input.as_ref(), prefixes).unwrap();
|
||||||
|
assert_eq!(String::from(&elem), output);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn failure_with_duplicate_namespace() {
|
fn failure_with_duplicate_namespace() {
|
||||||
let _: Element = r###"<?xml version="1.0" encoding="UTF-8"?>
|
let _: Element = r###"<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
|
||||||
|
|
@ -113,10 +113,18 @@ impl TreeBuilder {
|
||||||
RawEvent::XmlDeclaration(_, _) => {}
|
RawEvent::XmlDeclaration(_, _) => {}
|
||||||
|
|
||||||
RawEvent::ElementHeadOpen(_, (prefix, name)) => {
|
RawEvent::ElementHeadOpen(_, (prefix, name)) => {
|
||||||
|
// If self.prefixes_stack has been set via with_prefixes_stack before processing,
|
||||||
|
// ensure these are set on the root element.
|
||||||
|
let prefixes = if self.stack.is_empty() && self.prefixes_stack.len() == 1 {
|
||||||
|
self.prefixes_stack.pop().unwrap()
|
||||||
|
} else {
|
||||||
|
Prefixes::default()
|
||||||
|
};
|
||||||
|
|
||||||
self.next_tag = Some((
|
self.next_tag = Some((
|
||||||
prefix.map(|prefix| prefix.as_str().to_owned()),
|
prefix.map(|prefix| prefix.as_str().to_owned()),
|
||||||
name.as_str().to_owned(),
|
name.as_str().to_owned(),
|
||||||
Prefixes::default(),
|
prefixes,
|
||||||
BTreeMap::new(),
|
BTreeMap::new(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue