6-4 如何构建xml文档

>>> from xml.etree.ElementTree import Element,ElementTree
Element 是节点元素
ElementTree是由 Element 组成
1、创建一个元素
>>> e = Element("Data") #创建一个元素,传入一个字符串 <Data>是head的名字 >>> e.set('name','abc') #设备这个元素的属性,get获取属性,set设置属性。属性为’name’值 是abc
>>> help(Element.set) Help on method set in module xml.etree.ElementTree: set(self, key, value) unbound xml.etree.ElementTree.Element method
>>> from xml.etree.ElementTree import tostring #显示成为XML元素后转成了字符串 >>> tostring(e) '<Data name="abc" />'
#XML元素的所有内容都应该是字符串不应该是其他的数据类型
>>> e.text = 123 >>> tostring(e) Traceback (most recent call last): File "<pyshell#13>", line 1, in <module> tostring(e) File "C:\Python27\lib\xml\etree\ElementTree.py", line 1126, in tostring ElementTree(element).write(file, encoding, method=method) File "C:\Python27\lib\xml\etree\ElementTree.py", line 820, in write serialize(write, self._root, encoding, qnames, namespaces) File "C:\Python27\lib\xml\etree\ElementTree.py", line 937, in _serialize_xml write(_escape_cdata(text, encoding)) File "C:\Python27\lib\xml\etree\ElementTree.py", line 1075, in _escape_cdata _raise_serialization_error(text) File "C:\Python27\lib\xml\etree\ElementTree.py", line 1052, in _raise_serialization_error "cannot serialize %r (type %s)" % (text, type(text).__name__) TypeError: cannot serialize 123 (type int)
>>> e.text = '123' >>> tostring(e) '<Data name="abc">123</Data>'
2、给一个元素添加子元素
>>> e2 = Element('Row') #创建一个元素 >>> e3 = Element('Open') >>> e3.text = '8.80' >>> e2.append(e3) #将e3添加到e2成为其子元素 >>> tostring(e2) '<Row><Open>8.80</Open></Row>'
>>> help(Element.append) Help on method append in module xml.etree.ElementTree: append(self, element) unbound xml.etree.ElementTree.Element method
#将一个已赋值的元素属性删除的方法
>>> e.text '123' >>> e.text = None >>> tostring(e) '<Data name="abc" />' >>> e.append(e2) >>> tostring(e) '<Data name="abc"><Row><Open>8.80</Open></Row></Data>'
3、将XML格式的字符串写入文件中
(1)创建一个ElementTree
>>> et = ElementTree(e) >>> et <xml.etree.ElementTree.ElementTree object at 0x027166B0>
(2)使用ElementTree对象的write方法
>>> et.write(r"C:\视频\python高效实践技巧笔记\6数据编码与处理相关话题\6-4.xml")

例: 将6-1中的csv文件 bank-databak.csv 转为xml文件,脚本文件为
import csv from xml.etree.ElementTree import Element, ElementTree “”” 美化xml文件用,也就是使输出的xml文件有一个合理的缩进格式 “”” def pretty(e,level = 0): if(len(e)>0): e.text = '\n' + '\t' * (level+1) for child in e: pretty(child,level+1) child.tail = child.tail[:-1] e.tail = '\n' +'\t'*level “”“ CSV文件转XML文件,参数是CSV文件的路径 ”“” def CsvToXml(fname): with open(fname) as f: #打开CSV文件 reader = csv.reader(f) #读取CSV文件 head = reader.next() #获取CSV文件的头 root = Element('Data') #创建XML的一个元素作为根节点 for row in reader: #对CSV的头进行迭代 eRow = Element('Row') ##创建一个元素Row root.append(eRow) #将此Row元素添加到root中,作为子节点 for tag,text in zip(head,row): 同时迭代CSV文件的头的每一项和每一行的每一项 e = Element(tag) #将CSV头的项作为XML文件的一个元素 e.text = text #将CSV文件中的每一行的每一项的内容做为XML每一个元素的值。 eRow.append(e) #将此e的元素添加到Row中作为子节点 pretty(root) #美化XML文件 return ElementTree(root) #返回一个EleMentTree对象 #调用转化函数,返回一个ElementTree对象 et = CsvToXml(r'C:\视频\python高效实践技巧笔记\6数据编码与处理相关话题\bank-databak.csv') #将返回的ElementTree对象写入文件中 et.write(r'C:\视频\python高效实践技巧笔记\6数据编码与处理相关话题\bank-databak.xml')
结果:

posted on 2018-04-28 13:11 石中玉smulngy 阅读(338) 评论(0) 收藏 举报
浙公网安备 33010602011771号