示例#1
0
 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
示例#2
0
    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)]