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

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

  1. from xml.dom.minidom import parse, parseString
  2. from xml.etree import ElementTree
  3. import xml.dom.minidom
  4.  
  5. """
  6. Get XML String info 查询属性值
  7. response:xml string
  8. tag:xml tag
  9. element:xml attribute
  10. """
  11. def get_xml_info(response, element):
  12. DOMTree = xml.dom.minidom.parseString(response)
  13. return DOMTree.documentElement.getAttribute(element)
  14.  
  15. """
  16. Get XML String info 查询制定名称的特定标签id
  17. xmlstring:xml str
  18.  
  19. return config id
  20. """
  21. def get_config_id_from_xml(xmlstring, scan):
  22. root = ElementTree.fromstring(xmlstring)
  23. configs = root.findall('config')
  24. for config in configs:
  25. config_name = config.find('name').text
  26. if config_name == scan:
  27. return config.attrib['id']
  28.  
  29. """
  30. Get XML String info 查询指定id
  31. xmlstring:xml str
  32.  
  33. return report id
  34. """
  35. def get_report_id_from_xml(xmlstring):
  36. root = ElementTree.fromstring(xmlstring)
  37. report_id = root.find('report_id').text
  38. return report_id
  39.  
  40. """
  41. Get XML String info
  42. xmlstring:xml str
  43.  
  44. return progress
  45. """
  46. def get_progress_from_xml(xmlstring):
  47. root = ElementTree.fromstring(xmlstring)
  48. task = root.find('task')
  49. progress = float(task.find('progress').text)
  50. if progress < 0:
  51. return 100.0
  52. else:
  53. return progress
  54.  
  55. """
  56. Get XML Report info 从xml文件查询
  57. file_path : report path
  58. """
  59. def get_xml_report(file_path):
  60. report = {}
  61. result_dicts = {}
  62. resultsList = []
  63. try:
  64. root = ElementTree.parse(file_path)
  65. except:
  66. return {}
  67.  
  68. if root is not None:
  69. creation_time = root.find("creation_time")
  70. if creation_time is not None:
  71. report[creation_time.tag] = creation_time.text
  72. if root.find("report") is not None:
  73. scan_start = root.find("report").find("scan_start")
  74. if scan_start is not None:
  75. if scan_start.text:
  76. report[scan_start.tag] = scan_start.text
  77. results = root.getiterator("result")
  78. if results is not None:
  79. for result in results:
  80. if result.find("threat") is not None:
  81. if result.find("threat").text != "Log":
  82. resultsList.append(getResults(result))
  83.  
  84. report["Results"] = resultsList
  85. return report

Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件,封装函数的更多相关文章

  1. xml dom minidom

    一. xml相关术语: 1.Document(文档): 对应一个xml文件 2.Declaration(声明): <?xml version="1.0" encoding=& ...

  2. python XML文件解析:用xml.dom.minidom来解析xml文件

    python解析XML常见的有三种方法: 一是xml.dom.*模块,是W3C DOM API的实现,若需要处理DOM API则该模块很合适, 二是xml.sax.*模块,它是SAX API的实现,这 ...

  3. python 应用xml.dom.minidom读xml

    xml文件 <?xml version="1.0" encoding="utf-8"?> <city> <name>上海&l ...

  4. python模块:xml.dom.minidom

    """Simple implementation of the Level 1 DOM. Namespaces and other minor Level 2 featu ...

  5. python 之模块之 xml.dom.minidom解析xml

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...

  6. python-minidom模块【解析xml】

    1,xml的文档结构 1.1,XML文档包括XML头信息和XML信息体 1.1.1,XML文档头信息 <?xml version="1.0" encoding="u ...

  7. nodejs模块xml2js解析xml的坑

    在一个项目中,用到nodejs模块xml2js解析xml,xml的数据如下: <xml> <MsgId>6197906553041859764</MsgId> &l ...

  8. [java开发篇][dom模块] 遍历解析xml

    http://blog.csdn.net/andie_guo/article/details/24844351 XML DOM节点树 XML DOM将XML文档作为树结构,树结构称为一个节点树.所有的 ...

  9. java解析xml汇总(转自倾城幻影-Java解析xml汇总,链接:http://www.cnblogs.com/jiugehuanying/archive/2012/01/12/2320058.html)

    [引言] 目前在Java中用于解析XML的技术很多,主流的有DOM.SAX.JDOM.DOM4j,下文主要介绍这4种解析XML文档技术的使用.优缺点及性能测试. [一.基础知识--扫盲] sax.do ...

随机推荐

  1. c++ socket发送数据时,sendData = char * string 导致的乱码问题

    解决方法:将string 通过copy函数复制到某个char[] 1. string res =“xxx”; char arr[100]; int len = res.copy(arr, 100); ...

  2. 超级好用的excel导出方法,比phpexcel快n倍,并且无乱码

    public function exportToExcel($filename, $tileArray=[], $dataArray=[]){ ini_set('memory_limit','512M ...

  3. 【后缀数组】【LuoguP2408】 不同子串个数

    题目链接 题目描述 给你一个长为N的字符串,求不同的子串的个数 我们定义两个子串不同,当且仅当有这两个子串长度不一样 或者长度一样且有任意一位不一样. 子串的定义:原字符串中连续的一段字符组成的字符串 ...

  4. SQL语句操作数据试题

    1.在SQL Server中,下列关于数据完整性的说法错误的是(). (选择一项) A:实体完整性要求表中的每一行数据都反映不同的试题,不能存在相同的数据行 B:域完整性是只给定列的输入有效性 C:在 ...

  5. 【DataStage】使用Sequence Job报错:CopyOfseq_ld..JobControl (fatal error from @Coordinator): Sequence job (restartable) will abort due to previous unrecoverable errors

    错误描述: 在使用Sequence Job加载作业的时候,报了个错,详细错误内容如下: 出现这个错误的原因是由于以下配置问题,Excution action的状态为Run造成. 解决方案: 将Excu ...

  6. python ocr图片中汉字识别

    import os os.chdir("C:\Program Files (x86)\Tesseract-OCR") main = "Tesseract.exe d:/t ...

  7. Tomcat Response encode

    Character Encoding - Apache Tomcat - Apache Software Foundation https://cwiki.apache.org/confluence/ ...

  8. linux进程守护脚本

    为了防止进程异常挂掉,为了避免影响业务,编写一个守护进程,定时检查某个进程是否存在,如果不存在则自动启动该进程.编写脚本文件daemon.sh文件 while true; do server=`ps ...

  9. python2中的unicode()函数在python3中会报错:

    python2中的unicode()函数在python3中会报错:NameError: name 'unicode' is not defined There is no such name in P ...

  10. Nginx记录-Proxy_pass多个应用配置(转载)

    1. 在http节点下,加入upstream节点. upstream linuxidc {       server 10.0.6.108:7080;       server 10.0.0.85:8 ...