diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-12-01 11:40:55 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-12-01 11:40:55 +0000 |
| commit | 833c867189d757efb5b13e1e783869a4039860de (patch) | |
| tree | a967c7492c3390055c57a10a507d80755da0486a /mammoth | |
| parent | 8d1cc0932083a686e24ff02c9819e507fbb2cb9f (diff) | |
Create null XML element
Diffstat (limited to 'mammoth')
| -rw-r--r-- | mammoth/docx.py | 9 | ||||
| -rw-r--r-- | mammoth/xmlparser.py | 20 |
2 files changed, 23 insertions, 6 deletions
diff --git a/mammoth/docx.py b/mammoth/docx.py index bf4de0b..01087ce 100644 --- a/mammoth/docx.py +++ b/mammoth/docx.py @@ -47,11 +47,10 @@ def run(element): @handler("w:p") def paragraph(element): - properties = _find_child(element, "w:pPr") - if properties is None: - style_name = None - else: - style_name = _find_child(properties, "w:pStyle").attributes.get("w:val") + properties = element.find_child_or_null("w:pPr") + style_name = properties \ + .find_child_or_null("w:pStyle") \ + .attributes.get("w:val") children = _read_xml_elements(element.children) return documents.paragraph(children, style_name) diff --git a/mammoth/xmlparser.py b/mammoth/xmlparser.py index 8b26777..d58ea75 100644 --- a/mammoth/xmlparser.py +++ b/mammoth/xmlparser.py @@ -2,7 +2,25 @@ import collections import xml.sax -XmlElement = collections.namedtuple("XmlElement", ["name", "attributes", "children"]) +XmlElementBase = collections.namedtuple("XmlElement", ["name", "attributes", "children"]) +class XmlElement(XmlElementBase): + def find_child_or_null(self, name): + for child in self.children: + if child.name == name: + return child + return _null_xml_element + + +class NullXmlElement(object): + attributes = {} + + def find_child_or_null(self, name): + return self + + +_null_xml_element = NullXmlElement() + + XmlText = collections.namedtuple("XmlText", ["value"]) |
