Python解析XML文件实例分析
本文将介绍如何使用Python解析XML文件,包括如何解析XML文档、获取XML节点等。同时,我们会提供2个具体的示例来说明XML文件解析过程。
Python解析XML文件的原理
Python解析XML文件的原理是通过DOM、SAX以及ElementTree解析库来实现解析。
其中,DOM解析是将XML文档作为树形结构进行解析,将每个XML节点解析为一个DOM对象。DOM解析可以方便的操作XML文档,但是占用内存较大,对于大型XML文件可能会出现性能问题。
SAX解析是逐行读取XML文件,解析与处理XML节点。相对于DOM解析,SAX解析占用内存较小,可以处理大型XML文件,但是不方便操作XML文档。
ElementTree解析是融合了DOM和SAX解析的优点,占用内存小,可以方便的操作XML文档,同时也可以处理大型XML文件。
解析XML文件示例
解析简单的XML文档
我们先来看一个简单的XML文档:
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book>
<title lang="en">Learning Python</title>
<author>Mark Lutz</author>
<year>2013</year>
<price>39.95</price>
</book>
</bookstore>
我们可以使用ElementTree解析库来解析这个XML文件。使用ElementTree解析库可以方便的获取XML文档节点及其属性。
import xml.etree.ElementTree as ET
tree = ET.parse('bookstore.xml')
root = tree.getroot()
# 获取所有book节点
for book in root.findall('book'):
# 获取title节点的lang属性
lang = book.find('title').get('lang')
# 获取其他节点的值
author = book.find('author').text
year = book.find('year').text
price = book.find('price').text
# 打印解析结果
print(lang, author, year, price)
代码执行结果:
en J.K. Rowling 2005 29.99
en Mark Lutz 2013 39.95
解析带有命名空间的XML文档
接下来,我们来看带有命名空间的XML文件:
<?xml version="1.0" ?>
<films xmlns:ns="http://www.w3.org/1999/Data10/XMLSchema-instance" ns:noNamespaceSchemaLocation="films.xsd">
<film>
<title>Interstellar</title>
<director>Christopher Nolan</director>
<year>2014</year>
</film>
<film>
<title>Blade Runner 2049</title>
<director>Denis Villeneuve</director>
<year>2017</year>
</film>
</films>
带有命名空间的XML文件解析过程与普通XML文件解析大致相同,区别在于获取节点时需要在节点名称前添加命名空间。
import xml.etree.ElementTree as ET
tree = ET.parse('films.xml')
root = tree.getroot()
# 定义命名空间
namespaces = {'ns': 'http://www.w3.org/1999/Data10/XMLSchema-instance'}
# 获取所有film节点
for film in root.findall('ns:film', namespaces):
# 获取title节点的值
title = film.find('ns:title', namespaces).text
# 获取其他节点的值
director = film.find('ns:director', namespaces).text
year = film.find('ns:year', namespaces).text
# 打印解析结果
print(title, director, year)
代码执行结果:
Interstellar Christopher Nolan 2014
Blade Runner 2049 Denis Villeneuve 2017
总结
本文介绍了Python解析XML文件的原理,以及使用ElementTree解析库来解析XML文件的方法。同时,提供两个示例,说明了XML文件解析的具体过程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python解析xml文件实例分析 - Python技术站