@@ -471,32 +471,18 @@ where
471471 fn read_folder ( & mut self , attrs : HashMap < String , String > ) -> Result < Folder < T > , Error > {
472472 let mut name = None ;
473473 let mut description = None ;
474- let mut folder_elements = Vec :: new ( ) ;
475- let mut style_url : Option < String > = None ;
474+ let mut style_url = None ;
475+ let mut elements : Vec < Kml < T > > = Vec :: new ( ) ;
476476
477- loop {
478- let mut e = self . reader . read_event_into ( & mut self . buf ) ?;
479- match e {
480- Event :: Start ( ref mut e) => {
481- let attrs = Self :: read_attrs ( e. attributes ( ) ) ;
482- match e. local_name ( ) . as_ref ( ) {
483- b"name" => name = Some ( self . read_str ( ) ?) ,
484- b"description" => description = Some ( self . read_str ( ) ?) ,
485- b"styleUrl" => style_url = Some ( self . read_str ( ) ?) ,
486- _ => {
487- let start = e. to_owned ( ) ;
488- let element = self . read_element ( & start, attrs) ?;
489- folder_elements. push ( Kml :: Element ( element) ) ;
490- }
491- }
492- }
493- Event :: End ( ref mut e) => {
494- if e. local_name ( ) . as_ref ( ) == b"Folder" {
495- break ;
496- }
497- }
498- Event :: Comment ( _) => { }
499- _ => break ,
477+ for element in self . read_elements ( ) ? {
478+ match element {
479+ Kml :: Element ( el) => match el. name . as_str ( ) {
480+ "name" => name = el. content ,
481+ "description" => description = el. content ,
482+ "styleUrl" => style_url = el. content ,
483+ _ => { }
484+ } ,
485+ el => elements. push ( el) ,
500486 }
501487 }
502488
@@ -505,7 +491,7 @@ where
505491 description,
506492 style_url,
507493 attrs,
508- elements : folder_elements ,
494+ elements,
509495 } )
510496 }
511497
@@ -1693,6 +1679,29 @@ mod tests {
16931679 ) ) ) ;
16941680 }
16951681
1682+ #[ test]
1683+ fn test_parse_folder_content ( ) {
1684+ let kml_str = r#"
1685+ <Folder>
1686+ <Placemark></Placemark>
1687+ <name>Folder 1</name>
1688+ <description>Folder 1 description</description>
1689+ </Folder>
1690+ "# ;
1691+ let f: Kml = kml_str. parse ( ) . unwrap ( ) ;
1692+ assert_eq ! (
1693+ f,
1694+ Kml :: Folder ( Folder {
1695+ name: Some ( "Folder 1" . to_string( ) ) ,
1696+ description: Some ( "Folder 1 description" . to_string( ) ) ,
1697+ elements: vec![ Kml :: Placemark ( Placemark {
1698+ ..Default :: default ( )
1699+ } ) ] ,
1700+ ..Default :: default ( )
1701+ } )
1702+ ) ;
1703+ }
1704+
16961705 #[ test]
16971706 fn test_parse_doc_with_sibling_folders ( ) {
16981707 let kml_str = r#"
0 commit comments