1 问题引入
最近在做恶意样本行为可视化,样本的行为是xml文件形式给出,需要使用python对其解析。本次实验使用了dom进行的解析。
XML 指可扩展标记语言(eX tensible M arkup L anguage),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
XML 被设计用来传输和存储数据。
XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。
它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
常见的 XML 编程接口有 DOM 和 SAX,这两种接口处理 XML 文件的方式不同,当然使用场合也不同。
Python 有三种方法解析 XML,SAX,DOM,以及 ElementTree
主要参考:菜鸟教程——Python3 XML 解析
2 SAX
待补充
3 DOM
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。
一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
xml文件 movies.xml
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <collection shelf ="New Arrivals" > <movie title ="Enemy Behind" > <type > War, Thriller</type > <format > DVD</format > <year > 2003</year > <rating > PG</rating > <stars > 10</stars > <description > Talk about a US-Japan war</description > </movie > <movie title ="Transformers" > <type > Anime, Science Fiction</type > <format > DVD</format > <year > 1989</year > <rating > R</rating > <stars > 8</stars > <description > A schientific fiction</description > </movie > </collection >
Python 中用 xml.dom.minidom
来解析 xml 文件,实例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import xml.dom.minidomDOMTree = xml.dom.minidom.parse("movies.xml" ) collection = DOMTree.documentElement if collection.hasAttribute("shelf" ): print ("Root element : %s" % collection.getAttribute("shelf" )) movies = collection.getElementsByTagName("movie" ) for movie in movies: print ("*****Movie*****" ) if movie.hasAttribute("title" ): print ("Title: %s" % movie.getAttribute("title" )) type = movie.getElementsByTagName('type' )[0 ] print ("Type: %s" % type.childNodes[0 ].data) format = movie.getElementsByTagName('format' )[0 ] print ("Format: %s" % format.childNodes[0 ].data) rating = movie.getElementsByTagName('rating' )[0 ] print ("Rating: %s" % rating.childNodes[0 ].data) description = movie.getElementsByTagName('description' )[0 ] print ("Description: %s" % description.childNodes[0 ].data)
输出如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 Root element : New Arrivals *****Movie***** Title: Enemy Behind Type: War, Thriller Format: DVD Rating: PG Description: Talk about a US-Japan war *****Movie***** Title: Transformers Type: Anime, Science Fiction Format: DVD Rating: R Description: A schientific fiction *****Movie*****
完整的 DOM API 文档请查阅Python DOM APIs 。
4 ElementTree
待补充
X 参考
Life is painting a picture, not doing a sum.