• Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件,封装函数


    总结了一下使用Python对xml文件的解析,用到的模块儿如下:

    分别从xml字符串和xml文件转换为xml对象,然后解析xml内容,查询指定信息字段。

    from xml.dom.minidom import parse, parseString
    from xml.etree import ElementTree
    import xml.dom.minidom
    
    """
    Get XML String info 查询属性值
        response:xml string
        tag:xml tag
        element:xml attribute
    """
    def get_xml_info(response, element):
        DOMTree = xml.dom.minidom.parseString(response)
        return DOMTree.documentElement.getAttribute(element)
    
    """
    Get XML String info 查询制定名称的特定标签id
        xmlstring:xml str
    
        return config id
    """
    def get_config_id_from_xml(xmlstring, scan):
        root = ElementTree.fromstring(xmlstring)
        configs = root.findall('config')
        for config in configs:
            config_name = config.find('name').text
            if config_name == scan:
                return config.attrib['id']
    
    """
    Get XML String info 查询指定id
        xmlstring:xml str
    
        return report id
    """
    def get_report_id_from_xml(xmlstring):
        root = ElementTree.fromstring(xmlstring)
        report_id = root.find('report_id').text
        return report_id
    
    """
    Get XML String info
        xmlstring:xml str
    
        return progress 
    """
    def get_progress_from_xml(xmlstring):
        root = ElementTree.fromstring(xmlstring)
        task = root.find('task')
        progress = float(task.find('progress').text)
        if progress < 0:
            return 100.0
        else:
            return progress
    
    """
    Get XML Report info 从xml文件查询
        file_path : report path
    """
    def get_xml_report(file_path):
        report = {}
        result_dicts = {}
        resultsList = []
        try:
            root = ElementTree.parse(file_path)
        except:
            return {}
    
        if root is not None:
            creation_time = root.find("creation_time")
            if creation_time is not None:
                report[creation_time.tag] = creation_time.text
            if root.find("report") is not None:
                scan_start = root.find("report").find("scan_start")
                if scan_start is not None:
                    if scan_start.text:
                        report[scan_start.tag] = scan_start.text
            results = root.getiterator("result")
            if results is not None:
                for result in results:
                    if result.find("threat") is not None:
                        if result.find("threat").text != "Log":
                            resultsList.append(getResults(result))
    
        report["Results"] = resultsList
        return report
  • 相关阅读:
    浅谈MVVM
    组装数据和页面渲染
    Vuejs实现轮播图
    Vuejs选项卡案例
    选项卡案例
    js中用来操作数组的相关的方法
    js中用来操作字符串的相关的方法
    用逗号拼接字符串,并且去掉最后一个逗号
    微信分享链接或网站文章到微信朋友圈,缩略图片不显示,该如何解决?
    Spring 的介绍和目标
  • 原文地址:https://www.cnblogs.com/frisk/p/11568205.html
Copyright © 2020-2023  润新知