2020-08-23 00:23:50
Python提供了多种方式来读取和解析XML文件,其中最常用的两种方法是使用xml.dom.minidom模块和xml.etree.ElementTree模块。下面将详细介绍这两种方法,并提供相应的代码示例。
方法一:使用xml.dom.minidom模块xml.dom.minidom是Python标准库中的一个模块,它提供了DOM(文档对象模型)接口来解析XML文件。
1. 打开并解析XML文件import xml.dom.minidom# 打开xml文档dom = xml.dom.minidom.parse('abc.xml')2. 获取文档元素对象# 得到文档元素对象root = dom.documentElementprint(root.nodeName) # 输出根节点名称print(root.nodeValue) # 输出根节点值print(root.nodeType) # 输出根节点类型print(root.ELEMENT_NODE) # 输出元素节点类型常量3. 获取子标签# 获取所有<caption>标签captions = root.getElementsByTagName('caption')for caption in captions: print(caption.firstChild.data) # 输出标签内容# 获取特定位置的<caption>标签b = captions[2]print(b.nodeName)4. 获取标签属性值# 获取<login>标签的属性logins = root.getElementsByTagName('login')login = logins[0]username = login.getAttribute("username")password = login.getAttribute("passwd")print(username, password)# 获取<item>标签的id属性items = root.getElementsByTagName('item')item1 = items[0]item_id = item1.getAttribute("id")print(item_id)方法二:使用xml.etree.ElementTree模块xml.etree.ElementTree是另一个常用的XML处理模块,它提供了更简洁的API来解析和操作XML文件。
1. 解析XML文件from xml.etree import ElementTree as ET# 解析xml文件tree = ET.parse('abc.xml')root = tree.getroot()2. 遍历XML元素# 遍历所有子元素for child in root: print(child.tag, child.attrib)# 获取特定标签的内容for caption in root.iter('caption'): print(caption.text)# 获取特定属性的元素for item in root.findall('.//item'): item_id = item.get('id') print(item_id)3. 获取标签对之间的数据# 方法一:直接访问text属性for caption in root.findall('.//caption'): print(caption.text)# 方法二:使用iter方法遍历for elem in root.iter(): if elem.text and elem.text.strip(): print(f"{elem.tag}: {elem.text}")总结以下是使用xml.etree.ElementTree模块读取并解析XML文件的完整示例:
from xml.etree import ElementTree as ET# 解析xml文件tree = ET.parse('abc.xml')root = tree.getroot()# 输出根节点信息print(f"Root tag: {root.tag}")# 遍历所有子节点for child in root: print(f"Child tag: {child.tag}, Attributes: {child.attrib}")# 获取所有<caption>标签的内容print("nCaptions:")for caption in root.iter('caption'): print(caption.text)# 获取所有<item>标签的id属性print("nItem IDs:")for item in root.findall('.//item'): item_id = item.get('id') print(item_id)# 获取<login>标签的属性login = root.find('.//login')if login is not None: username = login.get('username') password = login.get('passwd') print(f"nLogin - Username: {username}, Password: {password}")通过以上方法,你可以灵活地读取和解析XML文件,并根据需要提取所需的数据。