设为首页 收藏本站
查看: 2760|回复: 0

[经验分享] python 解析XML xml.dom

[复制链接]

尚未签到

发表于 2015-4-20 09:52:40 | 显示全部楼层 |阅读模式
  一 、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
=====================================================

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58679-1-1.html 上篇帖子: python的二维数组操作 下篇帖子: 写简单游戏,学编程语言-python篇:传说哥大战剧毒术士
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表