From f127d6bbed76d3aab49e950ddabe637f63d1913a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 3 Jan 2016 00:06:50 +0000 Subject: Ignore child nodes that aren't elements when reading children --- NEWS | 4 ++++ mammoth/docx/body_xml.py | 5 +++-- tests/docx/body_xml_tests.py | 8 ++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index f5fabcf..6d4c95e 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +# 0.3.27 + +* Handle XML where the child nodes of an element contains text nodes. + # 0.3.26 * Always use mc:Fallback when reading mc:AlternateContent elements. diff --git a/mammoth/docx/body_xml.py b/mammoth/docx/body_xml.py index 680dede..f66eeae 100644 --- a/mammoth/docx/body_xml.py +++ b/mammoth/docx/body_xml.py @@ -3,7 +3,7 @@ import contextlib from .. import documents from .. import results from .. import lists -from .xmlparser import node_types +from .xmlparser import node_types, XmlElement def reader(numbering=None, @@ -293,7 +293,8 @@ def _create_reader(numbering, content_types, relationships, styles, docx_file, f return handler(element) - def _read_xml_elements(elements): + def _read_xml_elements(nodes): + elements = filter(lambda node: isinstance(node, XmlElement), nodes) return _combine_results(map(read, elements)) \ .map(lambda values: lists.collect(values)) diff --git a/tests/docx/body_xml_tests.py b/tests/docx/body_xml_tests.py index d0288bd..ddfa9b2 100644 --- a/tests/docx/body_xml_tests.py +++ b/tests/docx/body_xml_tests.py @@ -516,6 +516,14 @@ class ReadXmlElementTests(object): ]) result = _read_and_get_document_xml_element(element) assert_equal("second", result[0].style_id) + + @istest + def text_nodes_are_ignored_when_reading_children(self): + element = xml_element("w:r", {}, [xml_text("[text]")]) + assert_equal( + documents.run([]), + _read_and_get_document_xml_element(element) + ) def _read_and_get_document_xml_element(*args, **kwargs): -- cgit v1.2.3