python 生成 xml

  <?xml version="1.0" encoding="utf-8" ?> 
 <coverages>
 <coverage>
  <Type>total</Type> 
  <Name>0</Name> 
  <TotalLine>1</TotalLine> 
  <EffectiveLine>2</EffectiveLine> 
  <Covered>3</Covered> 
  <Cover>4</Cover> 
  </coverage>
  </coverages>


#coding:utf-8
import os
import codecs
import traceback
import xml.dom.minidom as minidom

def covert_to_unicode(msg):
	__re_str = None
	if isinstance(msg, unicode):
		__re_str = msg
	elif isinstance(msg, str):
		try:
			__re_str = msg.decode('gbk')
		except Exception, errinfo:
			raise Exception, '%s, %s' % (errinfo, str(msg))
	else:
		raise Exception, '%s 必须为str或unicode类型' % msg
	return __re_str

#print covert_to_unicode('哈哈')

class CreateCovXml():
	def __init__(self, cov_xml_path):
		self.cov_xml_path = cov_xml_path
		self.__dom = None
		self.__root = None
	
	def _covert_code(self, msg):
		return covert_to_unicode(msg)
	
	def __create_new_node(self, node_name, node_text=None):
		if self.__dom == None:
			raise Exception, '创建结点时,document对象还不存在'
		if None == node_text:
			return self.__dom.createElement(self._covert_code(node_name))
		else:
			newNode = self.__dom.createElement(self._covert_code(node_name))
			newText = self.__dom.createTextNode(self._covert_code(node_text))
			newNode.appendChild(newText)
			return newNode
	
	def begin_cov(self):
		try:
			impl = minidom.getDOMImplementation()
			self.__dom = impl.createDocument(None, u'coverages', None)
			self.__root = self.__dom.documentElement
		except:
			traceback.print_exc()
			raise Exception, '创建coverage xml根结点失败'
	def add_cov(self, type, name, total_line, effective_line, covered_line, cover_rate):
		if self.__root == None:
			raise Exception, '创建结点时,root结点不存在或对象不存在'
		
		type_node = self.__create_new_node('Type', type)
		name_node = self.__create_new_node('Name', name)
		total_line_node = self.__create_new_node('TotalLine', total_line)
		effective_line_node = self.__create_new_node('EffectiveLine', effective_line)
		covered_line_node = self.__create_new_node('Covered', covered_line)
		cover_rate_node = self.__create_new_node('Cover', cover_rate)
		
		new_coverage_node = self.__create_new_node('coverage')
		new_coverage_node.appendChild(type_node)
		new_coverage_node.appendChild(name_node)
		new_coverage_node.appendChild(total_line_node)
		new_coverage_node.appendChild(effective_line_node)
		new_coverage_node.appendChild(covered_line_node)
		new_coverage_node.appendChild(cover_rate_node)
		
		self.__root.appendChild(new_coverage_node)
	
	def end_cov(self):
		try:
			f = open(self.cov_xml_path, 'wb')
			writer = codecs.lookup('utf-8')[3](f)
			self.__dom.writexml(writer, encoding='utf-8')
			writer.close()
			f.close()
			return True
		except Exception, err:
			traceback.print_exc()
			raise Exception, '写xml文件出错'

if __name__ == '__main__':
	os.chdir("E:\\PyWk\\nodepad_py")
	test = CreateCovXml('cov.xml')
	test.begin_cov()
	test.add_cov(type="total", name='0', total_line='1', effective_line='2', covered_line='3', cover_rate='4')
	test.end_cov()
	print 'endl'		

你可能感兴趣的:(xml,python)