关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
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')可以得到这样的结果:

杨仕航
有人问我最近发了好多“Python读写xxx文档”的博文。主要是因为最近项目比较多这种东西 ^_^
2016-04-15 17:08 回复