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 Codeimport 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 Codeimport 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 Codeimport 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。这些解析器都有自己的优缺点,你可以根据需要选择适合自己的解析器。