python xml解析

xml:1.标签成对出现
     2.区分大小写
     3.标签要正确嵌套
     4.开始部分<?xml version="1.0"encoding="utf-8"?>
     5.只能有一个根节点
     6.节点可以有属性

创建XML文件
<?xml version="1.0" encoding="utf-8"?>
<xue>
    <seng>
        <name>xj</name>
        <age>18</age>
        <sex>男</sex>
        <score>80</score>
    </seng>
    <seng>
        <name>xy</name>
        <age>17</age>
        <sex>男</sex>
        <score>88</score>
    </seng>
    <seng>
        <name>hd</name>
        <age>16</age>
        <sex>男</sex>
        <score>88</score>
    </seng>
</xue>

1.dom(文档对象模型):把解析的xml整个加载到内存,组织成object树。
from xml.dom.minidom import parse  #加入模块
class Xue:
    def __init__(self,name,age,sex,score):
        self.name = None
        self.age = None
        self.sex = None
        self.score = None
    def __str__(self):
        return "姓名-{} 年龄-{} 性别-{} 成绩-{}".format(self.name,self.age,self.sex,self.score)
xues = []
#读取XML文件
doc = parse("paper") 
#得到根节点
root = doc.documentElement
xue = root.getElementsByTagName("seng")
for i in xue:
    a = i.getElementsByTagName("name")[0].childNodes[0].data
    b = i.getElementsByTagName("age")[0].childNodes[0].data
    c = i.getElementsByTagName("sex")[0].childNodes[0].data
    d= i.getElementsByTagName("score")[0].childNodes[0].data
    xues = Xue(a,b,c,d)
    print(xues)

结果: 姓名-xj 年龄-18 性别-男 成绩-80
          姓名-xy 年龄-17 性别-男 成绩-88
          姓名-hd 年龄-16 性别-男 成绩-88

 2.sax:事件驱动式解析,不会在内存中加载整个文档,只会根据自己编写的事件保存数据。
from xml.sax import ContentHandler  #导入模块
from xml.sax import parse #读取文件模块
class Xue:
    def __init__(self,name,age,sex,score):
        self.name = name
        self.age = age
        self.sex = sex
        self.score = score
    def __str__(self):
        return "姓名-{} 年龄-{} 性别-{} 成绩-{}".format(self.name,self.age,self.sex,self.score)
xuer = []
class Xues(ContentHandler):
    def __init__(self):
        self.seng = None
        self.tag = None
    def startDocument(self):
        print("开始")
    def startElement(self, name, attrs):
        self.tag = name
        if name == "seng":
            self.seng = Xue()
    def characters(self, content):
        if self.tag == "name":
            self.seng.name = content
        if self.tag == "age":
            self.seng.age = content
        if self.tag == "sex":
            self.seng.sec = content
        if self.tag == "score":
            self.seng.score = content
    def endElement(self, name):
        if name == "seng":
            xuer.append(self.sheng)
            self.sheng = None
        self.tag = None
    def endDocument(self):
        print("结束")
xues = Xues()
parse("paper",xues)
for i in xuer:
    print(i)

元素树解析
from xml.etree.ElementTree import *
class Xue:
    def __init__(self,name,age,sex,score):
        self.name = name
        self.age = age
        self.sex = sex
        self.score = score
    def __str__(self):
        return "姓名-{} 年龄-{} 性别-{} 成绩-{}".format(self.name,self.age,self.sex,self.score)
rood = parse("xml.xml")
xue = rood.findall("seng")
xues = []
for i in xue:
    seng = Xue()
    seng.name = i.find("name").text
    seng.age = i.find("age").text
    seng.sex = i.find("sex").text
    seng.score = i.find("score").text
    xues.append(seng)
for n in xues:
    print(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值