Heim >Backend-Entwicklung >Python-Tutorial >python 解析XML python模块xml.dom解析xml实例代码

python 解析XML python模块xml.dom解析xml实例代码

WBOY
WBOYOriginal
2016-06-16 08:45:231220Durchsuche

一 、python模块 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 #属性的值
访问元素属性

二、python解析xml文件的实例代码
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()

本节是 python 解析XML python模块xml.dom解析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
       
   

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

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn