File tree Expand file tree Collapse file tree 3 files changed +27
-1
lines changed Expand file tree Collapse file tree 3 files changed +27
-1
lines changed Original file line number Diff line number Diff line change @@ -4,6 +4,8 @@ Version NEXT:
44 * Update rxml dependency to 0.13.
55 * Fixes
66 * Remove warnings for elided lifetimes (rustc 1.90)
7+ * Fixes serialization and ensure prefixes are set on Element when using
8+ ` Element::from_reader_with_prefixes ` .
79
810Version 0.16, released 2024-07-23:
911 * Breaking
Original file line number Diff line number Diff line change @@ -1077,6 +1077,22 @@ mod tests {
10771077 assert_eq ! ( elem, elem2) ;
10781078 }
10791079
1080+ #[ test]
1081+ fn test_from_reader_with_prefixes_serialization ( ) {
1082+ let prefixes: BTreeMap < Option < String > , String > = {
1083+ let mut tmp = BTreeMap :: new ( ) ;
1084+ tmp. insert ( None , String :: from ( "foo" ) ) ;
1085+ tmp. insert ( Some ( String :: from ( "test" ) ) , String :: from ( "bar" ) ) ;
1086+ tmp
1087+ } ;
1088+
1089+ let input = r#"<foo test:attr="true"><bar/></foo>"# ;
1090+ let output = r#"<foo xmlns='foo' xmlns:test='bar' test:attr='true'><bar/></foo>"# ;
1091+
1092+ let elem = Element :: from_reader_with_prefixes ( input. as_ref ( ) , prefixes) . unwrap ( ) ;
1093+ assert_eq ! ( String :: from( & elem) , output) ;
1094+ }
1095+
10801096 #[ test]
10811097 fn failure_with_duplicate_namespace ( ) {
10821098 let _: Element = r###"<?xml version="1.0" encoding="UTF-8"?>
Original file line number Diff line number Diff line change @@ -113,10 +113,18 @@ impl TreeBuilder {
113113 RawEvent :: XmlDeclaration ( _, _) => { }
114114
115115 RawEvent :: ElementHeadOpen ( _, ( prefix, name) ) => {
116+ // If self.prefixes_stack has been set via with_prefixes_stack before processing,
117+ // ensure these are set on the root element.
118+ let prefixes = if self . stack . is_empty ( ) && self . prefixes_stack . len ( ) == 1 {
119+ self . prefixes_stack . pop ( ) . unwrap ( )
120+ } else {
121+ Prefixes :: default ( )
122+ } ;
123+
116124 self . next_tag = Some ( (
117125 prefix. map ( |prefix| prefix. as_str ( ) . to_owned ( ) ) ,
118126 name. as_str ( ) . to_owned ( ) ,
119- Prefixes :: default ( ) ,
127+ prefixes ,
120128 BTreeMap :: new ( ) ,
121129 ) ) ;
122130 }
You can’t perform that action at this time.
0 commit comments