diff --git a/libcomxml/core/__init__.py b/libcomxml/core/__init__.py
index 2b6bc16..a40740e 100644
--- a/libcomxml/core/__init__.py
+++ b/libcomxml/core/__init__.py
@@ -96,7 +96,7 @@ def _parse_list(self, element, value):
for val in value:
if isinstance(val, XmlField):
val.parent = element.tag
- self.parse_value(element, val)
+ self._parse_value(element, val)
elif isinstance(val, XmlModel):
val.build_tree()
element.append(val.doc_root)
@@ -220,6 +220,13 @@ def __init__(self, name, root, drop_empty=True):
def set_xml_encoding(self, encoding):
self.xml_enc = encoding
+ def element_is_empty(self, element):
+ return (
+ (element.text is None or element.text.strip() == "") and
+ len(element) == 0 and
+ len(element.attrib) == 0
+ )
+
def build_tree(self):
"""Bulids the tree with all the fields converted to Elements
"""
@@ -243,7 +250,7 @@ def build_tree(self):
for item in field:
if isinstance(item, XmlField):
ele = item.element()
- if self.drop_empty and len(ele) == 0:
+ if self.drop_empty and self.element_is_empty(ele):
continue
self.doc_root.append(ele)
elif isinstance(item, XmlModel):
diff --git a/tests/test_libcomxml.py b/tests/test_libcomxml.py
index 99904a0..8d16743 100644
--- a/tests/test_libcomxml.py
+++ b/tests/test_libcomxml.py
@@ -321,6 +321,52 @@ def __init__(self):
self.assertXmlEqual(self.xml, str(l))
+class TestElementIsEmptyMethod(XMLTest):
+
+ def setUp(self):
+ self.xml_empty = ""
+
+ self.xml = ""
+ self.xml += "Demo Text"
+ self.xml += ""
+
+ def test_element_is_empty(self):
+
+ class LegalLiterals(XmlModel):
+ _sort_order = ('legalliterals', 'legalreference')
+
+ def __init__(self):
+ self.legalliterals = XmlField('LegalLiterals')
+ self.legalreference = []
+ super(LegalLiterals, self).__init__('LegalLiterals', 'legalliterals')
+
+ class LegalReference(XmlField):
+
+ def __init__(self, value=None):
+ super(LegalReference, self).__init__('LegalReference', value=value)
+
+ #There is no value inside legal literal: the legal reference is empty
+ legalliterals = LegalLiterals()
+ text = ''
+ legalreference = LegalReference(value=text)
+ legalliterals.legalreference = [legalreference]
+ is_empty = legalliterals.element_is_empty(legalliterals.legalreference[0].element())
+ self.assertTrue(is_empty)
+
+ legalliterals.build_tree()
+ self.assertXmlEqual(self.xml_empty, str(legalliterals))
+
+ #There is a value inside legal literal: the legal reference is not empty
+ legalliterals = LegalLiterals()
+ text = 'Demo Text'
+ legalreference = LegalReference(value=text)
+ legalliterals.legalreference = [legalreference]
+ is_empty = legalliterals.element_is_empty(legalliterals.legalreference[0].element())
+ self.assertFalse(is_empty)
+
+ legalliterals.build_tree()
+ self.assertXmlEqual(self.xml, str(legalliterals))
+
class Namespaces(XMLTest):
def setUp(self):