python读取xml文件内容_Python解析XML文件

由于最近工作上需要大量XML文件里的内容,一个一个查看提取的话估计得到明年才能完事,不由得想起用Python写个小程序来解决这件事情。

XML是指可扩展标记语言,被设计用来传输和存储数据。本章节使用的XML实例文件works.xml内容如下:

敦刻尔克

诺兰

我的职业是小说家

村上春树

Python对XML的解析采用SAX (simple API for XML )模块。

python 标准库包含SAX解析器,SAX是一种基于事件驱动的API,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。在python中使用sax方式处理xml要先引入xml.sax.parse(),还有xml.sax.handler.ContentHandler。

ContentHandler类方法介绍:

characters(content)方法:

调用时机:

从行开始,遇到标签之前,存在字符,content的值为这些字符串。

从一个标签,遇到下一个标签之前, 存在字符,content的值为这些字符串。

从一个标签,遇到行结束符之前,存在字符,content的值为这些字符串。

标签可以是开始标签,也可以是结束标签。

startElement(name, attrs)方法:

遇到XML开始标签时调用,name是标签的名字,attrs是标签的属性值字典。

endElement(name)方法:

遇到XML结束标签时调用。

make_parser方法:

以下方法创建一个新的解析器对象并返回。

xml.sax.make_parser( [parser_list] )

参数说明:parser_list - 可选参数,解析器列表

parser方法

以下方法创建一个 SAX 解析器并解析xml文档:

xml.sax.parse( xmlfile, contenthandler[, errorhandler])

参数说明:xmlfile - xml文件名

contenthandler - 必须是一个ContentHandler的对象

errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象

Python解析XML实例:

#!/usr/bin/python3

#encoding=utf-8

import xml.sax

import xml.sax.handler

class WorksHandler(xml.sax.ContentHandler):

def __init__(self):

self.CurrentData = ""

self.names = ""

self.author = ""

#元素开始事件处理

def startElement(self, tag, attributes):

self.CurrentData = tag

if tag == "works":

print("***内容***")

title = attributes["title"]

print("类型:",title)

#元素结束事件处理

def endElement(self, tag):

if self.CurrentData == "names":

print("名称:",self.names)

elif self.CurrentData == "author":

print("作者:",self.author)

self.CurrentData = ""

#内容事件处理

def characters(self, content):

if self.CurrentData == "names":

self.names = content

elif self.CurrentData == "author":

self.author = content

if (__name__ == "__main__"):

#创建一个XMLReader

parser = xml.sax.make_parser()

parser.setFeature(xml.sax.handler.feature_namespaces,0)

#重写ContextHandler

Handler = WorksHandler()

parser.setContentHandler(Handler)

parser.parse("works.xml")

以上代码执行结果如下:***内容***

类型: 电影

名称: 敦刻尔克

作者: 诺兰

***内容***

类型: 书籍

名称: 我的职业是小说家

作者: 村上春树

保存至TXT文件:python3 read_xml.py > works.txt

待解决问题:

(1)、不通过命令“>"如何保存提取的XML文件内容?

(2)、解析多个文件时,对于个别文件不存在的标签、属性名称如何判断?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值