Python读写XML文档(xml.dom方式)

  • 发布时间:2016年4月15日 17:05
  • 作者:杨仕航
  • 分类标签: Python
  • 阅读(26744)
  • 评论(2)

Python对XML文档读写常用有几个模块: 

1) xml.etree.ElementTree 

2) xml.dom.* 

3) xml.sax.* 


最快要属于etree那个。这3个模块我使用之后,发现还是xml.dom用起来比较顺手。

这个模块是基于XML DOM的,所以各种方法可以参考XML的DOM文档:http://www.w3school.com.cn/xmldom/index.asp

看如下代码,我在代码中注释讲解。


1、写入XML文档

#coding:utf-8
from xml.dom import minidom

#写入xml文档的方法
def create_xml_test(filename):
    #新建xml文档对象
    xml=minidom.Document()
    
    #创建第一个节点,第一个节点就是根节点了
    root=xml.createElement('root')
    
    #写入属性(xmlns:xsi是命名空间,同样还可以写入xsi:schemaLocation指定xsd文件)
    root.setAttribute('xmlns:xsi',"http://www.w3.org/2001/XMLSchema-instance")
    
    #创建节点后,还需要添加到文档中才有效
    xml.appendChild(root)
    
    #一般根节点是很少写文本内容,那么给根节点再创建一个子节点
    text_node=xml.createElement('element')
    text_node.setAttribute('id','id1')
    root.appendChild(text_node)
    
    #给这个节点加入文本,文本也是一种节点
    text=xml.createTextNode('hello world')
    text_node.appendChild(text)
    
    #一个节点加了文本之后,还可以继续追加其他东西
    tag=xml.createElement('tag')
    tag.setAttribute('data','tag data')
    text_node.appendChild(tag)
    
    #写好之后,就需要保存文档了
    f=open(filename,'w')
    f.write(xml.toprettyxml(encoding='utf-8'))
    f.close()
    
if __name__=='__main__':
    #在当前目录下,创建1.xml
    create_xml_test('1.xml')


执行一下这段代码,可以生成xml文档。打开如下:


2、读取XML文档

一个节点下,可能存在多个同名的节点。所以,采用下面的XML文档来读取。

#coding:utf-8
from xml.dom import minidom

#读取xml文档的方法
def read_xml_test(filename):
    #打开这个文档,用parse方法解析
    xml=minidom.parse(filename)
    
    #获取根节点
    root=xml.documentElement
    
    #得到根节点下面所有的element节点
    #更多方法可以参考w2school的内容或者用dir(root)获取
    elements=root.getElementsByTagName('element')
    
    #遍历处理,elements是一个列表
    for element in elements:
        #判断是否有id属性
        if element.hasAttribute('id'):
            #不加上面的判断也可以,若找不到属性,则返回空
            print 'id:',element.getAttribute('id')
        
        #遍历element的子节点
        for node in element.childNodes:
            #通过nodeName判断是否是文本
            if node.nodeName=='#text':
                #用data属性获取文本内容
                text = node.data.replace('\n','')
                #这里的文本需要特殊处理一下,会有多余的'\n'
                print u'\t文本:',text
            else:
                #输出节点名
                print '\t'+node.nodeName

                #输出属性值,这里可以用getAttribute方法获取
                #也可以遍历得到,这是一个字典
                for attr,attr_val in node.attributes.items():
                    print '\t\t',attr,':',attr_val
        print ''

if __name__ == '__main__':
    read_xml_test('1.xml')
    raw_input('ok')

可以得到这样的结果:

更多方法可以参考:http://www.w3school.com.cn/xmldom/index.asp

上一篇:以图搜图(一):Python实现dHash算法

下一篇:Python读写utf-8的文本文件

评论列表

杨仕航

杨仕航

有人问我最近发了好多“Python读写xxx文档”的博文。主要是因为最近项目比较多这种东西 ^_^

2016-04-15 17:08 回复

新的评论

清空