def ele(self): if self._ele is None: pk = Parker(xml_tostring=_tostring, element=ElementTree.Element) for ele in pk.etree(self._json_data): self.parse_json(self.config_node_parent, ele) self._ele = self.root(self.config_node_parent) return self._ele
def parse_value(self, origin, value, tag): def convert_xml_to_lxml(xml_element, lxml_parent=None, default_ns=''): ns_name, tag = self.convert_tag(default_ns, xml_element.tag, src=ns_spec[origin]['val_name'], dst=Tag.LXML_ETREE) val_name_ns_tuple = self.convert_ns( ns_name, src=ns_spec[origin]['val_name'][0]) nsmap = {None: val_name_ns_tuple[Tag.NAMESPACE]} val_name_ns = val_name_ns_tuple[ns_spec[origin]['val_val'][0]] if xml_element.text is not None: ns_val, text = self.convert_tag(val_name_ns, xml_element.text, src=ns_spec[origin]['val_val'], dst=Tag.JSON_PREFIX) if ns_val != val_name_ns: v_v_ns = self.convert_ns(ns_val, src=ns_spec[origin]['val_val'][0]) v_v_prefix = v_v_ns[Tag.PREFIX] v_v_url = v_v_ns[Tag.NAMESPACE] nsmap[v_v_prefix] = v_v_url if lxml_parent is None: lxml_element = etree.Element(tag, nsmap=nsmap) else: lxml_element = etree.SubElement(lxml_parent, tag, nsmap=nsmap) if xml_element.text is not None: lxml_element.text = text for xml_child in xml_element: convert_xml_to_lxml(xml_child, lxml_parent=lxml_element, default_ns=ns_name) return lxml_element n, t = self.convert_tag('', tag, src=Tag.LXML_ETREE, dst=ns_spec[origin]['val_name']) json_val_str = '{{"{}": {}}}'.format(t, value.json_ietf_val.decode()) json_data = json.loads(json_val_str, object_pairs_hook=OrderedDict) pk = Parker(xml_tostring=_tostring, element=ElementTree.Element) return [convert_xml_to_lxml(i) for i in pk.etree(json_data)]