Skip to content

Commit 56ae697

Browse files
authored
fix: folder sub element parsing (#67)
1 parent b4b420f commit 56ae697

File tree

1 file changed

+35
-26
lines changed

1 file changed

+35
-26
lines changed

src/reader.rs

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)