Python XML 解析学习笔记

什么是 XML?

XML(eXtensible Markup Language)是一种标准的文本格式,用于描述数据。与HTML类似,但XML不是用来显示数据的,而是用来存储和传输数据的。

XML由元素(Element)、属性(Attribute)、文本(Text)等组成。每个XML文档都有一个根元素,它包含所有其他元素。

Python 中的 XML 解析器

Python中有三种常见的XML解析器:SAX、DOM和ElementTree。

SAX 解析器

SAX(Simple API for XML)解析器是一种基于事件的解析器。它一次只处理一个XML元素,并生成相应的事件(如开始元素、结束元素、字符数据等)。SAX解析器比DOM解析器更快,但它不能访问整个文档。

下面是一个使用SAX解析器解析XML文档的示例:

pythonCopy Code
import xml.sax class MyHandler(xml.sax.ContentHandler): def startElement(self, name, attrs): print("开始元素:", name) for attr in attrs.items(): print(" 属性 {} 值为 {}".format(attr[0], attr[1])) def endElement(self, name): print("结束元素:", name) def characters(self, content): print("字符数据:", content.strip()) xml_string = """ <bookstore> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="en">Harry Potter</title> <author>J.K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore> """ handler = MyHandler() parser = xml.sax.make_parser() parser.setContentHandler(handler) parser.parse(xml_string)

DOM 解析器

DOM(Document Object Model)解析器是一种基于树结构的解析器。它会将整个XML文档加载到内存中,并创建一个DOM树。你可以使用DOM解析器访问整个文档。

下面是一个使用DOM解析器解析XML文档的示例:

pythonCopy Code
import xml.dom.minidom xml_string = """ <bookstore> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="en">Harry Potter</title> <author>J.K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore> """ dom_tree = xml.dom.minidom.parseString(xml_string) bookstore = dom_tree.documentElement books = bookstore.getElementsByTagName("book") for book in books: title = book.getElementsByTagName("title")[0] author = book.getElementsByTagName("author")[0] year = book.getElementsByTagName("year")[0] price = book.getElementsByTagName("price")[0] print("标题:{}".format(title.childNodes[0].data)) print("作者:{}".format(author.childNodes[0].data)) print("年份:{}".format(year.childNodes[0].data)) print("价格:{}".format(price.childNodes[0].data))

ElementTree 解析器

ElementTree是Python标准库中的一个Pythonic XML解析库。它提供了一种简单而高效的方式来解析XML文档。

下面是一个使用ElementTree解析器解析XML文档的示例:

pythonCopy Code
import xml.etree.ElementTree as ET xml_string = """ <bookstore> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="en">Harry Potter</title> <author>J.K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore> """ root = ET.fromstring(xml_string) for book in root.findall("book"): title = book.find("title").text author = book.find("author").text year = book.find("year").text price = book.find("price").text print("标题:{}".format(title)) print("作者:{}".format(author)) print("年份:{}".format(year)) print("价格:{}".format(price))

结语

本文介绍了Python中XML的三种常见解析器:SAX、DOM和ElementTree。这些解析器都有自己的优缺点,你可以根据需要选择适合自己的解析器。