=Start=
缘由:
最近一段时间在使用Masscan这个超级端口扫描器做扫描,扫描完了之后就是数据处理和分析,一般情况下都是用XML文件来存放扫描结果(虽然说我自己更偏向于用list格式存放结果),比如:scantastic-tool 这个工具是用Python写的,调用Masscan/Nmap进行端口扫描,然后用xmltodict这个模块解析产生的XML文件,并将解析结果导入ElasticSearch,最后用Kibana进行展示。因为感觉解析XML文件的功能是很常用的,所以去学习了一下xmltodict模块的使用方法,感觉挺不错的。
参考解答:
#将XML解析成OrderedDict
import xmltodict, json myxml = """<mydocument has="an attribute"> <and> <many>elements</many> <many>more elements</many> </and> <plus a="complex"> element as well </plus> </mydocument>""" myxml_dict = xmltodict.parse(myxml) #用 parse 进行解析 print json.dumps(myxml_dict) #解析后的内容可以直接用json.dumps处理 print myxml_dict['mydocument']['@has'] # == u'an attribute' 「@开头的是指Element的属性」 print myxml_dict['mydocument']['and']['many'] # == [u'elements', u'more elements'] print myxml_dict['mydocument']['plus']['@a'] # == u'complex' print myxml_dict['mydocument']['plus']['#text'] # == u'element as well' 「#开头的是指Element的值」
#将dict转换成XML格式的字符串
mydict = { 'text': { '@color':'red', '@stroke':'2', '#text':'This is a test' } } mydict_xml = xmltodict.unparse(mydict, pretty=True) #用 unparse 可以将dict转换成XML格式的字符串 print mydict_xml """ <?xml version="1.0" encoding="utf-8"?> <text stroke="2" color="red">This is a test</text> """ print xmltodict.unparse(mydict, pretty=True)
参考链接:
- https://github.com/martinblech/xmltodict
- https://pypi.python.org/pypi/xmltodict
- http://docs.python-guide.org/en/latest/scenarios/xml/
- http://stackoverflow.com/questions/17177109/convert-xml-to-python-dict
- http://stackoverflow.com/questions/26926426/parsing-an-xml-file-with-an-ordered-dictionary
=END=
《“用xmltodict解析XML文件”》 有 1 条评论
Shell解析处理XML方法汇总
https://blog.mythsman.com/2017/10/15/1/
https://stackoverflow.com/questions/4680143/how-to-parse-xml-using-shellscript # xmllint/grep/xmlstarlet/xmlsh
https://www.linuxnix.com/readparse-xml-file-using-linux-shell-script/
https://gist.githubusercontent.com/glejeune/6935095/raw/4cfd0c3327db84c560488fbe2c946d74742143f7/xml_parser.sh