使用python3.4解析xml文件(sax、dom、etree),python3.4etree,调用sax模块处理xml


调用sax模块处理xml文件。

#重载了三个方法#处理xml,主要就是写自己的事件处理类from xml.sax import *class DengHandler(ContentHandler):    def startDocument(self):        print("----开始解析xml文档----")    def endDocument(self):        print("----xml文档解析完毕----")    def startElement(self,name,attrs):        if name == "author":            print("名字:",attrs['name']," 日期:",attrs["birth"])parse("deng.xml",DengHandler())

deng.xml

<?xml version = "1.0" encoding = "utf-8"?>    <author name = "dengjingdong" birth = "19920517"></author></people>

调用dom模块中的minidom处理xml文件。

from xml.dom.minidom import *#scannode函数打印xml文件的结构def scannode(doc,level = 0):    ret = doc.__class__.__name__    if doc.nodeType == Node.ELEMENT_NODE:        ret += ",标签:" + doc.tagName    print(" "*4*level,ret)    if doc.hasChildNodes:        for child in doc.childNodes:            scannode(child,level+1)#----scannode-----xin = parse("book.xml")print(xin)scannode(xin)#----scannode-----x = parse("domtest.xml")nx = x.getElementsByTagName("author")print(nx[0].getAttribute("birth"))print(nx[0].childNodes[0].data)print(nx[1].getAttribute("birth"))print(nx[1].childNodes[0].data)

book.xml

<?xml version = "1.0" encoding = "utf-8" ?><book>    <title>the book title</title>    <author>        <name>jingdong</name>        <boy>true</boy>    </author>    <chapter number = "1">        <title> first chapter </title>        <para>            I love python.        </para>    </chapter></book>

domtest.xml

<?xml version = "1.0" encoding = "utf-8" ?><people>    <author name = "dengjingdong" birth = "1990517">dongdong</author>    <author name = "wushengnan" birth = "19920520">nannan</author></people>

调用etree模块中的ElementTree生成所需的xml文件。

import xml.etree.ElementTree as etx = et.Element("name")x.text = "dengjingdong"x.set("boy","true")sx = et.tostring(x)print(sx)

评论关闭