python xml dom_python 解析XML xml.dom

一 、xml.dom 解析XML的API描述

minidom.parse(filename)

加载读取XML文件

doc.documentElement

获取XML文档对象

node.getAttribute(AttributeName)

获取XML节点属性值

node.getElementsByTagName(TagName)

获取XML节点对象集合

node.childNodes #返回子节点列表。

node.childNodes[index].nodeValue

获取XML节点值

node.firstChild

#访问第一个节点。等价于pagexml.childNodes[0]

doc = minidom.parse(filename)

doc.toxml('UTF-8')

返回Node节点的xml表示的文本

Node.attributes["id"]

a.name #就是上面的 "id"

a.value #属性的值

访问元素属性

二、代码演示

1、创建user.xml文件,添加XMl节点

Admin

admin@live.cn

23

Admin2

admin2@live.cn

22

Admin3

admin3@live.cn

27

Admin4

admin4@live.cn

25

Admin5

admin5@live.cn

20

Admin6

admin6@live.cn

23

2、Demo.py解析user.xml文档数据

#-*- coding:utf-8 -*-"""* User: lhj588

* Date: 11-11-9

* Time: 13:20

* Desc:"""

from xml.dom import minidom

def get_attrvalue(node, attrname):

return node.getAttribute(attrname) if node else ''

def get_nodevalue(node, index = 0):

return node.childNodes[index].nodeValue if node else ''

def get_xmlnode(node,name):

return node.getElementsByTagName(name) if node else []

def xml_to_string(filename='user.xml'):

doc = minidom.parse(filename)

return doc.toxml('UTF-8')

def get_xml_data(filename='user.xml'):

doc = minidom.parse(filename)

root = doc.documentElement

user_nodes = get_xmlnode(root,'user')

user_list=[]

for node in user_nodes:

user_id = get_attrvalue(node,'id')

node_name = get_xmlnode(node,'username')

node_email = get_xmlnode(node,'email')

node_age = get_xmlnode(node,'age')

node_sex = get_xmlnode(node,'sex')

user_name =get_nodevalue(node_name[0]).encode('utf-8','ignore')

user_email = get_nodevalue(node_email[0]).encode('utf-8','ignore')

user_age = int(get_nodevalue(node_age[0]))

user_sex = get_nodevalue(node_sex[0]).encode('utf-8','ignore')

user = {}

user['id'] , user['username'] , user['email'] , user['age'] , user['sex'] = (

int(user_id), user_name , user_email , user_age , user_sex

)

user_list.append(user)

return user_list

def test_xmltostring():

print xml_to_string()

def test_laod_xml():

user_list = get_xml_data()

for user in user_list :

#print user['sex'] print '-----------------------------------------------------'

if user:

user_str='编 号:%d\n用户名:%s\n性 别:%s\n年 龄:%s\n邮 箱:%s\n' % (int(user['id']) , user['username'], user['sex'] , user['age'] , user['email'])

print user_str

print '====================================================='

if __name__ == "__main__":

test_xmltostring()

test_laod_xml()

3、测试效果

A、测试toxml

demo.py 文件中修改成

if __name__ == "__main__":

test_xmltostring()

执行打印结果:

Admin

admin@live.cn

23

Admin2

admin2@live.cn

22

Admin3

admin3@live.cn

27

Admin4

admin4@live.cn

25

Admin5

admin5@live.cn

20

Admin6

admin6@live.cn

23

B、测试解析XML

demo.py 文件中修改成

if __name__ == "__main__":

test_laod_xml()

执行打印出结果:

-----------------------------------------------------

编 号:1000001

用户名:Admin

性 别:男

年 龄:23

邮 箱:admin@live.cn

=====================================================

-----------------------------------------------------

编 号:1000002

用户名:Admin2

性 别:男

年 龄:22

邮 箱:admin2@live.cn

=====================================================

-----------------------------------------------------

编 号:1000003

用户名:Admin3

性 别:男

年 龄:27

邮 箱:admin3@live.cn

=====================================================

-----------------------------------------------------

编 号:1000004

用户名:Admin4

性 别:女

年 龄:25

邮 箱:admin4@live.cn

=====================================================

-----------------------------------------------------

编 号:1000005

用户名:Admin5

性 别:男

年 龄:20

邮 箱:admin5@live.cn

=====================================================

-----------------------------------------------------

编 号:1000006

用户名:Admin6

性 别:女

年 龄:23

邮 箱:admin6@live.cn

=====================================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值