diff options
| -rw-r--r-- | mammoth/docx/xmlparser.py | 2 | ||||
| -rw-r--r-- | tests/docx/xmlparser_tests.py | 23 |
2 files changed, 24 insertions, 1 deletions
diff --git a/mammoth/docx/xmlparser.py b/mammoth/docx/xmlparser.py index 2cfe1e0..43d5eb4 100644 --- a/mammoth/docx/xmlparser.py +++ b/mammoth/docx/xmlparser.py @@ -9,7 +9,7 @@ class XmlElement(XmlElementBase): def find_child(self, name): for child in self.children: - if child.name == name: + if isinstance(child, XmlElement) and child.name == name: return child diff --git a/tests/docx/xmlparser_tests.py b/tests/docx/xmlparser_tests.py index 5e33778..65a2f25 100644 --- a/tests/docx/xmlparser_tests.py +++ b/tests/docx/xmlparser_tests.py @@ -63,6 +63,29 @@ def namespace_of_attributes_is_mapped_to_prefix(): def whitespace_between_xml_declaration_and_root_tag_is_ignored(): xml = _parse_xml_string(b'<?xml version="1.0" ?>\n<body/>') assert_equal("body", xml.name) + + +@istest +class FindChildTests(object): + @istest + def returns_none_if_no_children(self): + xml = xml_element("a") + assert_equal(None, xml.find_child("b")) + + @istest + def returns_none_if_no_matching_children(self): + xml = xml_element("a", {}, [xml_element("c")]) + assert_equal(None, xml.find_child("b")) + + @istest + def returns_first_matching_child(self): + xml = xml_element("a", {}, [xml_element("b", {"id": 1}), xml_element("b", {"id": 2})]) + assert_equal(1, xml.find_child("b").attributes["id"]) + + @istest + def ignores_text_nodes(self): + xml = xml_element("a", {}, [xml_text("Hello!")]) + assert_equal(None, xml.find_child("b")) def _parse_xml_string(string, namespace_mapping=None): |
