Skip to content
Snippets Groups Projects
Commit 8e9b6532 authored by Alexander Schlemmer's avatar Alexander Schlemmer
Browse files

ENH: started implementation of xpath generator

parent 0694462d
No related branches found
No related tags found
2 merge requests!181Release 0.9.0,!174XML Converter
Pipeline #54341 failed
This commit is part of merge request !174. Comments created here will be created in the context of that merge request.
......@@ -72,7 +72,30 @@ class XMLFileConverter(SimpleFileConverter):
class XMLTagConverter(Converter):
def create_children(self, generalStore: GeneralStore, element: StructureElement):
raise NotImplementedError()
if not isinstance(element, XMLTagElement):
raise TypeError("Element must be an instance of XMLTagElement.")
# The options text_as_children, attribs_as_children and
# tags_as_children are currently not implemented.
el_lst = []
if "xpath" in self.definition:
# in this case it does not make sense to use the other "children"-options:
# for opt in ("text_", "attribs_", "tags_"):
# if opt + "_as_children" in self.definition:
# raise RuntimeError("The option {} cannot be used when using"
# " xpath".format(opt))
# if xpath is present, use the xpath to generate children
children = element.xpath(self.definition["xpath"])
else:
# use the direct children of the node instead
children = list(element)
# if "text_as_children" in self.definition and self.definition["text_as_children"] == True:
# el_lst.append(XMLTextNode(element, element.tree))
# if "attribs_as_children" in self.definition and self.definition["attribs_as_children"] == True:
# # el_lst.append(XMLTextNode(element, element.tree))
for el in children:
el_lst.append(XMLTagElement(el, element.tree))
def typecheck(self, element: StructureElement):
"""
......
......@@ -133,7 +133,9 @@ def test_simple_xml(basic_xmltag_converter):
</a>
"""
tag = XMLTagElement("tag", fromstring(xml_text))
xml = fromstring(xml_text)
tag = XMLTagElement(xml.getroot(), xml)
m = basic_xmltag_converter.match(tag)
assert m is not None
......@@ -202,3 +204,7 @@ def test_nested_simple_xml(basic_xmltag_converter):
general_store = GeneralStore()
children = basic_xmltag_converter.create_children(general_store, tag)
assert len(children) == 1
assert isinstance(children[0], XMLTagElement)
assert children.name == "/a/img"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment