From 5404e7ab7e6be9e63dd3889a2f4b60faa0f6a570 Mon Sep 17 00:00:00 2001 From: JustNevi Date: Tue, 26 Aug 2025 18:03:02 +0200 Subject: [PATCH 1/2] feat: parse open elements --- osmxml/parser.py | 8 ++++++++ 1 file changed, 8 insertions(+) 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 From 56b13c47fc7e5a90a888bd35070b55cf23668b79 Mon Sep 17 00:00:00 2001 From: JustNevi Date: Tue, 26 Aug 2025 18:03:42 +0200 Subject: [PATCH 2/2] test: test open elements --- tests/test_parser.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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)