Skip to content
Snippets Groups Projects

xml attrib node converter

Merged Alexander Schlemmer requested to merge f-xml-attrib-node-converter into dev
Files
4
@@ -195,7 +195,10 @@ class XMLTagConverter(Converter):
@@ -195,7 +195,10 @@ class XMLTagConverter(Converter):
class XMLTextNodeConverter(Converter):
class XMLTextNodeConverter(Converter):
def create_children(self, generalStore: GeneralStore, element: StructureElement):
def create_children(self, generalStore: GeneralStore, element: StructureElement):
raise NotImplementedError()
"""
 
This converter does not create children.
 
"""
 
return []
def typecheck(self, element: StructureElement):
def typecheck(self, element: StructureElement):
"""
"""
@@ -210,6 +213,47 @@ class XMLTextNodeConverter(Converter):
@@ -210,6 +213,47 @@ class XMLTextNodeConverter(Converter):
if not isinstance(element, XMLTextNode):
if not isinstance(element, XMLTextNode):
raise TypeError("Element must be an instance of XMLTextNode.")
raise TypeError("Element must be an instance of XMLTextNode.")
raise NotImplementedError()
vardict = {}
 
 
m_text = re.match(self.definition["match_text"], element.value,
 
re.DOTALL)
 
if m_text is None:
 
return None
 
vardict.update(m_text.groupdict())
 
 
return vardict
 
 
 
class XMLAttributeNodeConverter(Converter):
 
def create_children(self, generalStore: GeneralStore, element: StructureElement):
 
"""
 
This converter does not create children.
 
"""
 
return []
 
 
def typecheck(self, element: StructureElement):
 
"""
 
Check whether the current structure element can be converted using
 
this converter.
 
"""
 
return isinstance(element, XMLAttributeNode)
 
 
def match(self, element: StructureElement) -> Optional[dict]:
 
# See https://gitlab.indiscale.com/caosdb/src/caosdb-crawler/-/issues/145
 
# for a suggestion for the design of the matching algorithm.
 
if not isinstance(element, XMLAttributeNode):
 
raise TypeError("Element must be an instance of XMLAttributeNode.")
 
 
vardict = {}
return None
m_name = re.match(self.definition["match_name"], element.key)
 
if m_name is None:
 
return None
 
vardict.update(m_name.groupdict())
 
 
m_value = re.match(self.definition["match_value"], element.value)
 
if m_value is None:
 
return None
 
vardict.update(m_value.groupdict())
 
 
return vardict
Loading