Example #1
0
    def classified(self):
        self._object_confirm = self.Object_Confirm_IUnKnown
        self._object_name = None

        current_path = self.file_info.file_name_with_full_path
        metadata_file_name = CFile.join_file(current_path,
                                             self.FileName_MetaData_Bus_21AT)
        if CFile.file_or_path_exist(metadata_file_name):
            self.__bus_metadata_xml_file_name__ = metadata_file_name
            self.__metadata_xml_obj__ = CXml()
            try:
                self.__metadata_xml_obj__.load_file(metadata_file_name)
                self.__classified_object_type = CXml.get_element_text(
                    self.__metadata_xml_obj__.xpath_one(
                        self.Path_21AT_MD_Content_ProductType))

                if CUtils.equal_ignore_case(
                        self.__classified_object_type,
                        CUtils.dict_value_by_name(self.get_information(),
                                                  self.Plugins_Info_Type,
                                                  None)):
                    self._object_confirm = self.Object_Confirm_IKnown
                    self._object_name = CXml.get_element_text(
                        self.__metadata_xml_obj__.xpath_one(
                            self.Path_21AT_MD_Content_ProductName))
            except:
                self.__metadata_xml_obj__ = None
                CLogger().warning('发现文件{0}符合二十一世纪业务数据集标准, 但该文件格式有误, 无法打开! ')

        return self._object_confirm, self._object_name
    def get_sync_dict_list(self, insert_or_updata) -> list:
        """
        insert_or_updata 中 self.DB_True为insert,DB_False为updata
        本方法的写法为强规则,调用add_value_to_sync_dict_list配置
        第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置
        """
        sync_dict_list = self.get_sync_predefined_dict_list(insert_or_updata)
        object_table_id = self._obj_id
        object_table_data = self._dataset
        self.add_value_to_sync_dict_list(sync_dict_list, 'aprnwid',
                                         object_table_id)
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'datatype',
            object_table_data.value_by_name(0, 'dsodatatype', ''))

        dsometadataxml = object_table_data.value_by_name(
            0, 'dsometadataxml_bus', '')
        dsometadataxml_xml = CXml()
        dsometadataxml_xml.load_xml(dsometadataxml)  # 加载查询出来的xml
        self.add_value_to_sync_dict_list(sync_dict_list, 'dsometadatajson',
                                         dsometadataxml)
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'sensors',
            list([
                dsometadataxml_xml.get_element_text_by_xpath_one(
                    '/root/MajorSource')
            ]), self.DataValueType_Array)
        return sync_dict_list
Example #3
0
    def process_metadata_bus_dict(self):
        dataset = self._dataset
        class_plugins = self.get_class_plugins()
        try:
            dsometadataxml_xml = CXml()
            dsometadataxml = dataset.value_by_name(0, 'dsometadataxml_bus', '')
            dsometadataxml_xml.load_xml(dsometadataxml)

            view_path = settings.application.xpath_one(
                self.Path_Setting_MetaData_Dir_View, None)
            browser_path = CFile.file_path(
                dataset.value_by_name(0, 'dso_browser', None))
            multiple_metadata_bus_filename_dict = \
                class_plugins.get_multiple_metadata_bus_filename_with_path(
                    CFile.join_file(view_path, browser_path)
                )
            result, metadata_bus_dict = class_plugins.metadata_bus_xml_to_dict(
                dsometadataxml_xml, multiple_metadata_bus_filename_dict)

            self.set_metadata_bus_dict(metadata_bus_dict)
            return result
        except Exception as error:
            return CResult.merge_result(
                self.Failure,
                '卫星数据的业务元数据的详细内容解析出错!原因为{0}'.format(error.__str__()))
Example #4
0
    def txt_to_xml(self, file_metadata_name_with_path: str):
        """
        完成 王学谦 txt文件转xml,在函数外提前定义xml对象并获取父节点传入,函数会将通过父节点构造xml对象 by王学谦
        :param file_metadata_name_with_path:查询的mat文件全名,带路径
        :return xml_obj:将文件内容存储好的项目对象
        """
        text_list = CFile.file_2_list(
            file_metadata_name_with_path)  # 获取mat文件作为列表
        if (text_list is None) or len(text_list) == 0:
            raise Exception('元数据文件无法读取,请检查')  # 如果获取的文件内容为空,则抛出异常

        xml_obj = CXml()  # 建立xml对象
        node_root = xml_obj.new_xml('root')
        xml_obj.set_attr(node_root, self.Name_Type,
                         self.Transformer_TXT)  # 设置root节点与属性
        for row_text in text_list:
            if not CUtils.equal_ignore_case(row_text, ''):
                row_list = re.split(r'=',
                                    row_text.strip())  # 利用正则表达式,根据一个或多个tab剪切字符
                # item节点
                node_item = xml_obj.create_element(node_root, 'item')
                xml_obj.set_attr(node_item, self.Name_Name,
                                 CUtils.any_2_str(row_list[0]).strip())
                if len(row_list) > 1:
                    item_value = CUtils.any_2_str(row_list[1].strip())
                    if item_value.startswith('"') and item_value.endswith('"'):
                        item_value = item_value[1:-1]
                    xml_obj.set_element_text(node_item,
                                             item_value)  # 设置item节点与属性与内容
        return xml_obj
Example #5
0
    def __init__(self):
        self.__quality__ = CQuality()

        self.__metadata_extract_result__ = self.Not_Support
        self.__metadata_extract_memo__ = ''
        self.__metadata_text__ = None
        self.__metadata_xml__ = CXml()
        self.__metadata_json__ = CJson()
        self.__metadata_type__ = self.MetaDataFormat_Text

        self.__metadata_bus_extract_result__ = self.Not_Support
        self.__metadata_bus_extract_memo__ = ''
        self.__metadata_bus_text__ = None
        self.__metadata_bus_xml__ = CXml()
        self.__metadata_bus_json__ = CJson()
        self.__metadata_bus_type__ = self.MetaDataFormat_Text

        self.__thumb_img_file_name__ = ''
        self.__browse_img_file_name__ = ''
        self.__metadata_view_extract_result__ = self.Not_Support
        self.__metadata_view_extract_memo__ = ''

        self.__time_information__ = CJson()
        self.__metadata_time_extract_result__ = self.Not_Support
        self.__metadata_time_extract_memo__ = ''

        self.__metadata_spatial_extract_result__ = self.Not_Support
        self.__metadata_spatial_extract_memo__ = ''
        self.__metadata_spatial__ = CMDSpatial()
Example #6
0
    def xls_to_xml(self, file_metadata_name_with_path: str):
        """
         完成 王学谦 xls/xlsx文件转xml,在函数外提前定义xml对象并获取父节点传入,函数会将通过父节点构造xml对象 by王学谦
        :param file_metadata_name_with_path:查询的xls/xlsx文件全名,带路径
        :return xml_obj:将文件内容存储好的项目对象
        """
        all_data = xlrd.open_workbook(file_metadata_name_with_path)  # 获取表格所有内容
        table_data = all_data.sheets()[0]  # 默认获取第一个表格

        cols_num = table_data.ncols  # 获取列数
        rows_num = table_data.nrows  # 获取行数
        cols_index = 0  # 预定义列的index
        if CUtils.equal_ignore_case(CUtils.any_2_str(cols_num),
                                    CUtils.any_2_str(2)):
            pass  # 无序号列从1列开始
        elif CUtils.equal_ignore_case(CUtils.any_2_str(cols_num),
                                      CUtils.any_2_str(3)):
            cols_index = 1  # 有序号列从2列开始
        else:
            raise Exception('xls格式异常,无法正常解析')

        xml_obj = CXml()  # 建立xml对象
        node_root = xml_obj.new_xml('root')
        xml_obj.set_attr(node_root, self.Name_Type,
                         self.transformer_type)  # 设置root节点与属性
        for row in range(0, rows_num):
            node_item = xml_obj.create_element(node_root, 'item')
            xml_obj.set_attr(
                node_item, self.Name_Name,
                CUtils.any_2_str(table_data.cell(row,
                                                 cols_index).value).lower())
            xml_obj.set_element_text(
                node_item,
                table_data.cell(row, cols_index + 1).value)  # 设置item节点与属性与内容
        return xml_obj
Example #7
0
    def mat_to_xml(self, file_metadata_name_with_path: str):
        """
        完成 王学谦 mat文件转xml,在函数外提前定义xml对象并获取父节点传入,函数会将通过父节点构造xml对象 by王学谦
        :param file_metadata_name_with_path:查询的mat文件全名,带路径
        :return xml_obj:将文件内容存储好的项目对象
        """
        text_list = CFile.file_2_list(
            file_metadata_name_with_path)  # 获取mat文件作为列表
        if (text_list is
                None) or len(text_list) == 0 or CUtils.equal_ignore_case(
                    CUtils.any_2_str(text_list), ''):
            raise  # 如果获取的文件内容为空,则抛出异常
        flag = False  # 设置标志

        xml_obj = CXml()  # 建立xml对象
        node_root = xml_obj.new_xml('root')
        xml_obj.set_attr(node_root, self.Name_Type,
                         self.transformer_type)  # 设置root节点与属性
        for index, row_text in enumerate(text_list):
            if row_text.startswith('1\t'):  # 从开头为1+tab键的行开始录入
                flag = True
            row_list = re.split(r'\s+', row_text)  # 利用正则表达式,根据一个或多个tab剪切字符
            if flag:
                node_item = xml_obj.create_element(node_root, 'item')
                xml_obj.set_attr(node_item, self.Name_Name,
                                 CUtils.any_2_str(row_list[1]).lower())
                xml_obj.set_element_text(
                    node_item,
                    CUtils.any_2_str(row_list[2].strip()))  # 设置item节点与属性与内容
        if not flag:
            raise Exception('文件内容异常,无法正常识别文件开头')  # 如果未找到1+tab键开头,则抛出异常
        return xml_obj
Example #8
0
    def a_xml_attribute(cls, audit_id, audit_title, audit_group, audit_result,
                        xml_obj: CXml, xpath: str, attr_name: str,
                        qa_items: dict) -> list:
        result_dict = cls.__init_audit_dict__(audit_id, audit_title,
                                              audit_group, audit_result)
        if xml_obj is None:
            result_dict[cls.Name_Message] = 'XML对象不合法, 节点[{0}]不存在'.format(
                xpath)
            return [result_dict]

        element_obj = xml_obj.xpath_one(xpath)
        if element_obj is not None:
            if CXml.attr_exist(element_obj, attr_name):
                attr_text = CXml.get_attr(element_obj, attr_name, '')
                return cls.__a_check_value__(
                    result_dict, attr_text,
                    '属性[{0}]在XML节点[{1}.{2}]'.format(audit_title, xpath,
                                                    attr_name), qa_items)
            else:
                result_dict[
                    cls.
                    Name_Message] = '属性[{0}]在XML节点[{1}.{2}]未找到, 请检查修正!'.format(
                        audit_title, xpath, attr_name)
        else:
            result_dict[
                cls.Name_Message] = '属性[{0}]在XML节点[{1}]未找到, 请检查修正!'.format(
                    audit_title, xpath)

        return [result_dict]
Example #9
0
    def a_xml_element(cls, audit_id, audit_title, audit_group, audit_result,
                      xml_obj: CXml, xpath: str, qa_items: dict) -> list:
        """
        判断一个xml元数据中, 指定的xpath, 对应的element, 满足 kargs参数中的检测项目
        :param audit_id:
        :param audit_title:
        :param audit_group:
        :param audit_result:
        :param xml_obj:
        :param xpath:
        :param qa_items:
        :return:
        """
        result_dict = cls.__init_audit_dict__(audit_id, audit_title,
                                              audit_group, audit_result)
        if xml_obj is None:
            result_dict[cls.Name_Message] = 'XML对象不合法, 节点[{0}]不存在'.format(
                xpath)
            return [result_dict]

        element_obj = xml_obj.xpath_one(xpath)
        if element_obj is not None:
            element_text = CXml.get_element_text(element_obj)
            return cls.__a_check_value__(result_dict, element_text,
                                         '属性[{0}]'.format(audit_title),
                                         qa_items)
        else:
            result_dict[cls.Name_Message] = 'XML对象的节点[{0}]不存在, 请检查修正!'.format(
                xpath)
            return [result_dict]
Example #10
0
 def test_new_xml(self):
     """
     新建一个xml对象, 必须给定根节点名称
     """
     root_element_name = "root"
     xml = CXml()
     xml.new_xml(root_element_name)
     assert True
Example #11
0
 def metadata_bus_2_params(self, metadata_xml: CXml, params: dict):
     metadata_list = metadata_xml.xpath('{0}/*'.format(
         self.Path_MD_Bus_Root))
     for metadata_item in metadata_list:
         metadata_item_name = CXml.get_element_name(
             metadata_item).lower().strip()
         metadata_item_value = CXml.get_element_text(
             metadata_item).lower().strip()
         params[metadata_item_name] = metadata_item_value
Example #12
0
 def test_load_xml(self):
     """
     通过给定的xml内容, 对xml对象进行初始化
     """
     xml_content = '''
     <root name="hello world"></root>
     '''
     xml = CXml()
     xml.load_xml(xml_content)
     assert True
Example #13
0
 def test_load_file(self):
     """
     通过给定的xml文件名, 对xml对象进行初始化
     """
     xml = CXml()
     if CFile.file_or_path_exist(self.test_filename):
         xml.load_file(self.test_filename)
         assert True
     else:
         assert False
Example #14
0
 def test_to_xml(self):
     """
     通过给定的xml内容, 对xml对象进行初始化
     :return:
     """
     xml = CXml()
     xml_content = '''
     <root><element>hello</element></root>
     '''
     xml.load_xml(xml_content)
     xml_string = xml.to_xml()
     assert xml_string == '<root><element>hello</element></root>'
Example #15
0
 def append_data_records_quality(self, record_index, audit_result: dict):
     """
     设置数据的每一个记录的质量信息
     :param record_index:
     :param audit_result:
     :return:
     """
     temp_node = CXml.node_xpath_one(
         self.__node_data_records,
         './{0}[@index="{1}"]'.format(self.Name_Record, record_index))
     if temp_node is None:
         temp_node = CXml.create_element(self.__node_data_records,
                                         self.Name_Record)
     self.__append_quality_info(temp_node, audit_result)
Example #16
0
 def set_value_from_file(self, file_name: str, file_format: str,
                         file_encoding: str):
     """
     设置value为文件内容
     . 根据文件格式, 可以加载文件内容
     . 如果文件格式为二进制, 则value存储文件名
     :param file_name:
     :param file_format:
     :param file_encoding:
     :return:
     """
     if CUtils.equal_ignore_case(file_format, CResource.FileFormat_TXT):
         self._value = {
             CResource.Name_Text: CFile.file_2_str(file_name),
             CResource.Name_Type: CResource.DataValueType_SQL
         }
     elif CUtils.equal_ignore_case(file_format, CResource.FileFormat_XML):
         self._value = {
             CResource.Name_Text: CXml.file_2_str(file_name),
             CResource.Name_Type: CResource.DataValueType_SQL
         }
     elif CUtils.equal_ignore_case(file_format, CResource.FileFormat_Json):
         self._value = {
             CResource.Name_Text: CJson.file_2_str(file_name),
             CResource.Name_Type: CResource.DataValueType_SQL
         }
     else:
         self._value = {
             CResource.Name_Text: file_name,
             CResource.Name_Type: CResource.DataValueType_File
         }
Example #17
0
    def __plugins_classified_by_plugin_node_list__(
            cls, file_info: CDMFilePathInfoEx,
            plugin_node_list: list) -> CPlugins:
        """
        根据外部给定的插件xml节点数组, 顺序进行识别, 返回第一个识别出文件的插件对象
        :param file_info:
        :param plugin_node_list:
        :return:
        """
        for plugin_node in plugin_node_list:
            plugin_id = CXml.get_element_text(plugin_node)
            class_classified_obj = cls.plugins(file_info, plugin_id)

            if class_classified_obj is None:
                continue

            try:
                object_confirm, object_name = class_classified_obj.classified()
                if object_confirm != cls.Object_Confirm_IUnKnown:
                    CLogger().debug('{0} is classified as {1}.{2}'.format(
                        file_info.file_main_name,
                        class_classified_obj.get_information(),
                        class_classified_obj.get_id()))
                    return class_classified_obj
            except:
                CLogger().debug('插件[{0}]解析出现异常, 请检查!'.format(plugin_id))
                continue
        else:
            return None
Example #18
0
    def get_information(self) -> dict:
        information = super().get_information()
        if self.__metadata_xml_obj__ is not None:
            information[self.Plugins_Info_Title] = CXml.get_element_text(
                self.__metadata_xml_obj__.xpath_one(
                    self.Path_21AT_MD_Content_ProductName))
        information[self.Plugins_Info_Type_Code] = None  # '110001'
        information[
            self.Plugins_Info_Group] = self.DataGroup_Industry_Land_DataSet
        information[self.Plugins_Info_Group_Title] = self.data_group_title(
            information[self.Plugins_Info_Group])
        information[
            self.Plugins_Info_Catalog] = self.DataCatalog_Land  # 'land'
        information[self.Plugins_Info_Catalog_Title] = self.data_catalog_title(
            information[self.Plugins_Info_Catalog])  # '国土行业'
        information[self.Plugins_Info_MetaDataEngine] = None
        information[self.Plugins_Info_BusMetaDataEngine] = self.Engine_Custom
        information[
            self.Plugins_Info_DetailEngine] = self.DetailEngine_Busdataset
        information[self.Plugins_Info_HasChildObj] = self.DB_True

        information[self.Plugins_Info_Is_Spatial] = self.DB_False
        information[self.Plugins_Info_Is_Dataset] = self.DB_True
        information[self.Plugins_Info_Spatial_Qa] = self.DB_False
        information[self.Plugins_Info_Time_Qa] = self.DB_True
        information[self.Plugins_Info_Visual_Qa] = self.DB_False

        return information
Example #19
0
 def set_metadata_bus(self, metadata_bus_extract_result: int,
                      metadata_bus_extract_memo: str,
                      metadata_bus_type: int, metadata_bus_text):
     self.__metadata_bus_extract_result__ = metadata_bus_extract_result
     self.__metadata_bus_extract_memo__ = metadata_bus_extract_memo
     self.__metadata_bus_type__ = metadata_bus_type
     if self.__metadata_bus_type__ == self.MetaDataFormat_Json:
         self.__metadata_bus_text__ = ''
         self.__metadata_bus_xml__ = CXml()
         self.__metadata_bus_json__.load_json_text(metadata_bus_text)
     elif self.__metadata_bus_type__ == self.MetaDataFormat_XML:
         self.__metadata_bus_text__ = ''
         self.__metadata_bus_xml__.load_xml(metadata_bus_text)
         self.__metadata_bus_json__ = CJson()
     else:
         self.__metadata_bus_text__ = metadata_bus_text
         self.__metadata_bus_xml__ = CXml()
         self.__metadata_bus_json__ = CJson()
Example #20
0
 def set_metadata_bus_file(self, metadata_bus_extract_result: int,
                           metadata_bus_extract_memo: str,
                           metadata_type: int, file_name):
     self.__metadata_bus_extract_result__ = metadata_bus_extract_result
     self.__metadata_bus_extract_memo__ = metadata_bus_extract_memo
     self.__metadata_bus_type__ = metadata_type
     if self.__metadata_bus_type__ == self.MetaDataFormat_Json:
         self.__metadata_bus_text__ = ''
         self.__metadata_bus_xml__ = CXml()
         self.__metadata_bus_json__.load_file(file_name)
     elif self.__metadata_bus_type__ == self.MetaDataFormat_XML:
         self.__metadata_bus_text__ = ''
         self.__metadata_bus_xml__.load_file(file_name)
         self.__metadata_bus_json__ = CJson()
     else:
         self.__metadata_bus_text__ = CFile.file_2_str(file_name)
         self.__metadata_bus_xml__ = CXml()
         self.__metadata_bus_json__ = CJson()
Example #21
0
 def test_set_attr(self):
     """
     设置一个节点的属性
     :return:
     """
     xml_content = '''<root name="hello world"></root>'''
     xml = CXml()
     xml.load_xml(xml_content)
     element = xml.xpath_one('/root')
     CXml.set_attr(element, 'name', 'championing')
     assert CXml.get_element_xml(element) == '<root name="championing"/>'
Example #22
0
 def test_set_element_text(self):
     """
     设置一个节点的文本
     :return:
     """
     xml_content = '''<root name="hello world"></root>'''
     xml = CXml()
     xml.load_xml(xml_content)
     element = xml.xpath('/root')[0]
     CXml.set_element_text(element, 'hello')
     assert CXml.get_element_xml(element) == '<root name="hello world"><![CDATA[hello]]></root>'
 def access_check_dict(self) -> dict:  # 预留的方法,sync写完后再调
     object_name = self._obj_name
     dsometadataxml_bus = self._dataset.value_by_name(
         0, 'dsometadataxml_bus', '')
     xml = CXml()
     xml.load_xml(dsometadataxml_bus)  # 初始化xml
     dsometadataxml_bus_type = '{0}'.format(
         xml.xpath_one("/root/@type"))  # 查询业务元数据类别
     if object_name is not None:
         if dsometadataxml_bus_type is not None:
             if CUtils.equal_ignore_case(dsometadataxml_bus_type, 'mdb'):
                 return self.access_check_dict_mdb()
             elif CUtils.equal_ignore_case(dsometadataxml_bus_type, 'mat'):
                 return self.access_mdb_check_dict_mat()
             elif CUtils.equal_ignore_case(dsometadataxml_bus_type, 'xls') \
                     or CUtils.equal_ignore_case(dsometadataxml_bus_type, 'xlsx'):
                 return self.access_mdb_check_dict_xls()
     raise Exception("数据{0}业务元数据类型为'{1}'出现错误,没有可识别的类型".format(
         object_name, dsometadataxml_bus_type))
Example #24
0
 def test_append(self):
     """
     将一个子节点加入到指定节点下
     :return:
     """
     xml_content = '''<root name="hello world"></root>'''
     xml = CXml()
     xml.load_xml(xml_content)
     child_element = etree.Element('train', name='wing')
     element = xml.root_element()
     CXml.append(element, child_element)
     assert CXml.get_element_xml(element) == '<root name="hello world"><train name="wing"/></root>'
Example #25
0
 def test_creat_element(self):
     """
     在一个节点下创建一个新节点
     :return:
     """
     xml_content = '''
         <root name="hello world"><element name="hello"></element></root>
         '''
     xml = CXml()
     xml.load_xml(xml_content)
     element = xml.root_element()
     CXml.create_element(element, "element1")
     assert CXml.get_element_xml(element) == '<root name="hello world"><element name="hello"/><element1/></root>'
Example #26
0
 def test_clone(self):
     """
     根据给定的xml节点, 深度克隆节点的全部内容, 创建一个新的节点
     :return:
     """
     xml = CXml()
     xml_comment = '''<root name="hello world"><element>hello</element></root>'''
     xml.load_xml(xml_comment)
     element = CXml.clone(xml.root_element())
     assert CXml.get_element_xml(element) == xml_comment
Example #27
0
 def test_get_tree_root(self):
     """
     获取树对象的根节点
     :return:
     """
     xml_content = '''<root name="hello world"><parent><grandson>hello</grandson></parent></root>'''
     xml = CXml()
     xml.load_xml(xml_content)
     tree = CXml.get_tree_root(xml.tree())
     assert CXml.get_element_name(tree) == 'root'
Example #28
0
 def get_sync_dict_list(self, insert_or_updata) -> list:
     """
     insert_or_updata 中 self.DB_True为insert,DB_False为updata
     本方法的写法为强规则,调用add_value_to_sync_dict_list配置
     第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置
     """
     sync_dict = self.get_sync_predefined_dict_list(insert_or_updata)
     object_table_id = self._obj_id
     object_table_data = self._dataset
     dsometadataxml = object_table_data.value_by_name(
         0, 'dsometadataxml_bus', '')
     dsometadataxml_xml = CXml()
     dsometadataxml_xml.load_xml(dsometadataxml)  # 加载查询出来的xml
     self.add_value_to_sync_dict_list(sync_dict, 'aprpwid', object_table_id)
     self.add_value_to_sync_dict_list(
         sync_dict, 'dsname',
         dsometadataxml_xml.get_element_text_by_xpath_one(
             '/root/DSName'))  # 配置字段值
     self.add_value_to_sync_dict_list(
         sync_dict, 'producttypechn',
         dsometadataxml_xml.get_element_text_by_xpath_one(
             '/root/ProductType'))
     self.add_value_to_sync_dict_list(
         sync_dict, 'dsometadatajson',
         object_table_data.value_by_name(0, 'dsometadataxml_bus', ''))
     return sync_dict
Example #29
0
    def get_sync_dict_list(self, insert_or_updata) -> list:
        """
                insert_or_updata 中 self.DB_True为insert,DB_False为updata
                本方法的写法为强规则,调用add_value_to_sync_dict_list配置
                第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置
        """
        sync_dict = self.get_sync_predefined_dict_list(insert_or_updata)
        object_table_id = self._obj_id
        object_table_data = self._dataset

        # 业务元数据
        dsometadataxml_bus = object_table_data.value_by_name(
            0, 'dsometadataxml_bus', '')
        xml = CXml()
        xml.load_xml(dsometadataxml_bus)

        # 下列字段名均待修改
        self.add_value_to_sync_dict_list(sync_dict, 'aprmwid', object_table_id)
        self.add_value_to_sync_dict_list(
            sync_dict, 'mosaiclinefilename',
            xml.get_element_text_by_xpath_one("//item[@name='ProductName']"))
        self.add_value_to_sync_dict_list(
            sync_dict, 'sensors',
            xml.get_element_text_by_xpath_one("//item[@name='SatelliteID']"))
        self.add_value_to_sync_dict_list(
            sync_dict, 'dsometadatajson',
            object_table_data.value_by_name(0, 'dsometadataxml_bus', ''))
        self.add_value_to_sync_dict_list(
            sync_dict, 'resolution',
            xml.get_element_text_by_xpath_one("//item[@name='Resolution']"))
        # self.add_value_to_sync_dict_list(sync_dict, 'regionname', xml.get_element_text_by_xpath_one(
        #     "//item[@name='GeographicName']"))
        dso_prj_project = object_table_data.value_by_name(
            0, 'dso_prj_project', '')
        if CUtils.equal_ignore_case(dso_prj_project, 'tj2000'):
            dso_prj_project = '2000天津城市坐标系'
        if CUtils.equal_ignore_case(dso_prj_project, 'tj1990'):
            dso_prj_project = '1990天津任意直角坐标系'
        if CUtils.equal_ignore_case(dso_prj_project, 'cgcs2000'):
            dso_prj_project = '2000国家标准坐标系'
        else:
            dataoptions = '其他国家标准坐标系'
        self.add_value_to_sync_dict_list(sync_dict, 'dataoptions',
                                         dso_prj_project)

        # 备注
        self.add_value_to_sync_dict_list(
            sync_dict, 'remark',
            xml.get_element_text_by_xpath_one("//item[@name='Description']"))
        return sync_dict
Example #30
0
    def mdb_to_xml(self, file_metadata_name_with_path: str):
        """
         TODO 王学谦 mdb文件转xml,在函数外提前定义xml对象并获取父节点传入,函数会将通过父节点构造xml对象 by王学谦
        :param file_metadata_name_with_path:查询的mdb文件全名,带路径
        :return xml_obj:将文件内容存储好的项目对象
        """
        conn = None  # 预定义连接与游标,方便释放
        cur = None
        try:
            conn = self.get_mdb_connect(file_metadata_name_with_path)
            cur = conn.cursor()  # 游标

            sql = "SELECT * FROM " + self.object_name
            cur.execute(sql)
            table_data = cur.fetchall()
            # total_rows = len(alldata)  # 行
            # total_cols = len(alldata[0])  # 列
            xml_obj = CXml()  # 建立xml对象
            node_root = xml_obj.new_xml('root')
            xml_obj.set_attr(node_root, self.Name_Type,
                             self.transformer_type)  # 设置root节点与属性
            for field_index, row_obj in enumerate(cur.description):
                row_name = row_obj[0]  # 字段名称
                row_type = row_obj[1]  # 字段类型
                if row_type is bytearray:  # 跳过长二进制数组
                    continue
                node_item = xml_obj.create_element(node_root, 'item')
                xml_obj.set_attr(node_item, self.Name_Name,
                                 CUtils.any_2_str(row_name).lower())
                xml_obj.set_element_text(
                    node_item, table_data[0][field_index])  # 设置item节点与属性与内容
        except Exception as error:
            raise Exception(error.__str__())
        finally:
            if cur is not None:
                cur.close()
            if conn is not None:
                conn.close()
        return xml_obj