zoukankan      html  css  js  c++  java
  • Python_xml_minidom

    1、解析xml...

    解析部分是参照着原文和api来弄得:http://www.cnblogs.com/lhj588/archive/2011/11/09/2242483.html

    各种方法的使用参照着api来看就懂得了...

    Test.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <users>
    
        <user id="1000001">
    
            <username>Admin1</username>
    
            <email>admin@live.cn</email>
    
            <age>23</age>
    
            <sex>男</sex>
    
        </user>
    
        <user id="1000002">
    
            <username>Admin2</username>
    
            <email>admin@live.cn</email>
    
            <age>23</age>
    
            <sex>男</sex>
    
        </user>
    
        <user id="1000003">
    
            <username>Admin3</username>
    
            <email>admin@live.cn</email>
    
            <age>23</age>
    
            <sex>男</sex>
    
        </user>
    
        <user id="1000004">
    
            <username>Admin4</username>
    
            <email>admin@live.cn</email>
    
            <age>23</age>
    
            <sex>男</sex>
    
        </user>
    
        <user id="1000005">
    
            <username>Admin5</username>
    
            <email>admin@live.cn</email>
    
            <age>23</age>
    
            <sex>男</sex>
    
        </user>
    
    </users>
    

    Test.py

    # -*- coding:utf-8 -*-
    
    from xml.dom import minidom
    
    #获取标签中的对应属性的值...
    
    def get_attrvalue(attr,attrname):
    
        return attr.getAttribute(attrname) if attr 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 ''
    
    #Return a string or byte string containing the XML represented by the DOM node.
    
    def xml_to_string(filename='test.xml'):
    
        doc=minidom.parse(filename)
    
        return doc.toxml('utf-8')
    
     
    
    #获取xml中的数据...
    
    def get_xml_data(filename='test.xml'):
    
        doc=minidom.parse(filename)
    
        #获取Document Object
    
        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])
    
            user_email=get_nodevalue(node_email[0])
    
            user_age=int(get_nodevalue(node_age[0]))
    
            user_sex=get_nodevalue(node_sex[0])
    
            
    
            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_load_xml():
    
        user_list=get_xml_data()
    
        for user in user_list:
    
            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_load_xml()
    
     
    

     

    2、创建xml

    0.0 在没网络的情况下查阅api弄得...xml的格式和上部分的一样

    # -*- coding:utf-8 -*-
    
    from xml.dom import minidom
     
    
    #主要是用来生成一个document对象
    
    domimplementation=minidom.getDOMImplementation()
    
    #创建document type
    
    doc_type=domimplementation.createDocumentType("users",1,1) 
    
    #生成document对象
    
    document=domimplementation.createDocument("", "users",doc_type) 
    # createDocument(namespaceUri, qualifiedName, doctype)
    #该方法中的doctype是由createDocumentType(qualifiedName, publicId, systemId)生成的...
    #其中qualifiedName的格式是prefix:tagname,prefix表明名称空间,tagname表明标签名,假如我们写成qualifiedName='xxx:users' 那么标签为<xxx:users />
    #root 即users
    
    root=document.documentElement  
    
    #创建子标签
    
    node=document.createElement("user") 
    
    #添加注释
    
    com_node=document.createComment("user's info show ...")
    
    node.appendChild(com_node)
    
    #创建孙子标签》。。
    
    name_node=document.createElement('username')
    
    email_node=document.createElement('email')
    
    age_node=document.createElement('age')
    
    sex_node=document.createElement('sex')
    
    #为孙子标签添加值
    
    text_node=document.createTextNode("Admin")
    
    name_node.appendChild(text_node)
    
    text_node=document.createTextNode("admin@live.cn")
    
    email_node.appendChild(text_node)
    
    text_node=document.createTextNode("22")
    
    age_node.appendChild(text_node)
    
    text_node=document.createTextNode("男")
    
    sex_node.appendChild(text_node)
    
    #为子标签添加孙子标签...
    
    node.appendChild(name_node)
    
    node.appendChild(email_node)
    
    node.appendChild(age_node)
    
    node.appendChild(sex_node)
    #为子标签添加属性
    node.setAttribute("id","1000001")
    
    #root添加子标签
    root.appendChild(node) 
    print(document.toxml())
    
    #输出到文件中
    
    with open('userinfo.xml',mode='w') as f:
    
        f.write(document.toxml())
    

     

     

  • 相关阅读:
    B-树和B+树
    线程与内核对象的同步-2
    线程与内核对象的同步
    高级线程同步 临界区
    Levenshtein Distance (编辑距离) 算法详解
    平衡二叉树
    静态查找表
    C++中的容器类详解
    How do I list all tables/indices contained in an SQLite database
    SmartGit STUDY 2
  • 原文地址:https://www.cnblogs.com/lazyzhong/p/3499066.html
Copyright © 2011-2022 走看看