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())

 

 

posted @ 2013-12-31 11:42  红尘眷恋  阅读(332)  评论(0编辑  收藏  举报