diff --git a/osmxml/parser.py b/osmxml/parser.py index 81ebda2..cf07100 100644 --- a/osmxml/parser.py +++ b/osmxml/parser.py @@ -73,5 +73,13 @@ def parse_elements(xml_string: str) -> List[XMLElement]: if (strip_text): element_tree[-1].add_child(XMLTextElement(text=strip_text)) + # Add not closed elements + if (len(element_tree) > 0): + # Add not closed element as new element + elements.append(element_tree.pop(0)) + # and add every other elements to that open element as a child + for i in range(len(element_tree)): + elements[-1].add_child(element_tree.pop(0)) + return elements diff --git a/tests/test_parser.py b/tests/test_parser.py index fe5b6a8..c14d7a6 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -67,3 +67,26 @@ def test_parse_number(self): elements = XMLParser.parse_elements(xml_data) self.assertEqual(len(elements), 3) + + + xml_data = """ + + """ + + elements = XMLParser.parse_elements(xml_data) + + self.assertEqual(len(elements), 1) + + + xml_data = """ + + + + + + + """ + + elements = XMLParser.parse_elements(xml_data) + + self.assertEqual(len(elements), 1)