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


Posted in Python onFebruary 07, 2014

一 、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节点

<?xml version="1.0" encoding="UTF-8" ?>
<users>
    <user id="1000001">
        <username>Admin</username>
        <email>admin@live.cn</email>
        <age>23</age>
        <sex>男</sex>
    </user>
    <user id="1000002">
        <username>Admin2</username>
        <email>admin2@live.cn</email>
        <age>22</age>
        <sex>男</sex>
    </user>
    <user id="1000003">
        <username>Admin3</username>
        <email>admin3@live.cn</email>
        <age>27</age>
        <sex>男</sex>
    </user>
    <user id="1000004">
        <username>Admin4</username>
        <email>admin4@live.cn</email>
        <age>25</age>
        <sex>女</sex>
    </user>
    <user id="1000005">
        <username>Admin5</username>
        <email>admin5@live.cn</email>
        <age>20</age>
        <sex>男</sex>
    </user>
    <user id="1000006">
        <username>Admin6</username>
        <email>admin6@live.cn</email>
        <age>23</age>
        <sex>女</sex>
    </user>
</users>

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实例 第二部分的内容。
执行打印结果:

<user id="1000001">
        <username>Admin</username>
        <email>admin@live.cn</email>
        <age>23</age>
        <sex>男</sex>
    </user>
<user id="1000002">
        <username>Admin2</username>
        <email>admin2@live.cn</email>
        <age>22</age>
        <sex>男</sex>
    </user>
<user id="1000003">
        <username>Admin3</username>
        <email>admin3@live.cn</email>
        <age>27</age>
        <sex>男</sex>
    </user>
<user id="1000004">
        <username>Admin4</username>
        <email>admin4@live.cn</email>
        <age>25</age>
        <sex>女</sex>
    </user>
<user id="1000005">
        <username>Admin5</username>
        <email>admin5@live.cn</email>
        <age>20</age>
        <sex>男</sex>
    </user>
<user id="1000006">
        <username>Admin6</username>
        <email>admin6@live.cn</email>
        <age>23</age>
        <sex>女</sex>
    </user>

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

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

Python 相关文章推荐
基于Python实现文件大小输出
Jan 11 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
pip install python 快速安装模块的教程图解
Oct 08 Python
Python列表元素常见操作简单示例
Oct 25 Python
python删除某个目录文件夹的方法
May 26 Python
Python中常见的数制转换有哪些
May 27 Python
Python decimal模块使用方法详解
Jun 08 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
Jun 17 Python
PyCharm配置anaconda环境的步骤详解
Jul 31 Python
python利用platform模块获取系统信息
Oct 09 Python
python合并文本文件示例
Feb 07 #Python
python实现哈希表
Feb 07 #Python
python处理cookie详解
Feb 07 #Python
urllib2自定义opener详解
Feb 07 #Python
python解析html开发库pyquery使用方法
Feb 07 #Python
python3.3实现乘法表示例
Feb 07 #Python
zbar解码二维码和条形码示例
Feb 07 #Python
You might like
PHP 和 COM
2006/10/09 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
php+croppic.js实现剪切上传图片功能
2018/08/14 PHP
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
jquery mobile实现拨打电话功能的几种方法
2013/08/05 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
python局域网ip扫描示例分享
2014/04/03 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
python中的逆序遍历实例
2019/12/25 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
eBay德国站:eBay.de
2017/09/14 全球购物
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
公司出纳岗位职责
2013/12/07 职场文书
给校长的一封建议书
2014/03/12 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
党员先进事迹材料
2014/12/19 职场文书
歌舞青春观后感
2015/06/10 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
Python图片验证码降噪和8邻域降噪
2021/08/30 Python