ElementTree处理简单XML
2016-01-18 14:28
274 查看
# -*- coding:gb2312 -*- import os # 最好使用C实现的哪种,速度快,消耗内存少 try: import xml.etree.cElementTree as ET # use except ImportError: import xml.etree.ElementTree as ET g_path_XML = '../../XML/' class XmlTest(object): def __init__(self): self.tree = None #(树) self.root = None # 根节点,root是一个Element元素 # 从创建文件夹->xml->tree def startSetPath(self, s_dir=None): ''' 更新XML存放路径,并开始新的存放记录 参数: s_dir: 具体到路径 ''' if s_dir: global g_path_XML g_path_XML = os.path.abspath(s_dir) else: g_path_XML = os.path.abspath(g_path_XML) # 如果文件夹存在,则根据文件夹数量新建,+1.xml if os.path.exists(g_path_XML): g_path_XML = os.path.join(g_path_XML, str(len(os.listdir(g_path_XML))+1)+'.xml') # 第一次肯定新建文件夹,包含'1.xml' else: os.mkdir(g_path_XML) g_path_XML = os.path.join(g_path_XML, '1.xml') self.tree = ET.ElementTree() # self.root = ET.Element('root') # 新创建一个元素,根节点,root是一个Element元素 self.tree._setroot(self.root) # def _setroot(self, element): 注意:参数element是一个元素 # 获取XML内容 def getXmlContent(self, s_file=None): ''' 参数: s_file: 具体到某个文件 ''' if s_file: global g_path_XML g_path_XML = os.path.abspath(s_file) else: g_path_XML = os.path.join(os.path.abspath(g_path_XML), '1.xml') if os.path.exists(g_path_XML): # tree = ET.ElementTree('root', g_path_XML) # ElementTree 有两个paramer, 第一个是根节点,第二个是需解析的xml文件 # 加载并解析这个XML,形成一个tree(树) self.tree = ET.ElementTree(file=g_path_XML) self.root = self.tree.getroot() # ET.dump(tree) else: print "路径%s不存在" % g_path_XML def writeXml(self): # tree.write(sys.stdout) # 写入缓存 self.tree.write(g_path_XML, 'UTF-8') # 写入XML # 删除XML节点 def delXmlNode(self): for child_of_root in self.tree.iter(tag='Basic'): # del child_of_root[4] # 删除节点 # set可以修改和增加元素中的(字典中的值) child_of_root[0].set('xionda', '888') child_of_root[0].set('Value', '111') # 增加新XML节点 def addNewXmlNode(self): # 增加 <My><Person Age="24" Name="liuyc" Sex="1" /></My> a = ET.SubElement(self.root, 'My') b = ET.SubElement(a, 'Person') b.set('Name', 'liuyc') b.set('Sex', 'man') b.set('Age', '24') def creatNewTree(self): ''' 新建一棵树 <new_root><elem_a><child01>c: some thing</child01><child02 /></elem_a><elem_b>b: some text</elem_b></new_root> ''' a = ET.Element('elem_a') # 新建一个树的节点a c = ET.SubElement(a, 'child01') # a点增加一个新节点 c.text = 'c: some thing' # c节点中间增加文体 d = ET.SubElement(a, 'child02') # a增加第二个节点 b = ET.Element('elem_b') # 新建和a同级的节点 b.text = 'b: some text' new_root = ET.Element('new_root') new_root.extend((a, b)) # (a,b)合并到new_root树节点 new_tree = ET.ElementTree(new_root) # 增加一颗树 ET.dump(new_tree) def printXml(self): print '----------print_xml-----------' i_num = 0 for child_of_root in self.tree.iter(): i_num += 1 print child_of_root.tag, child_of_root.attrib # print "[%s] (Name=%s) (Type=%s) (Value=%s)" % \ # (i_num, child_of_root.attrib['Name'], child_of_root.attrib['Type'], child_of_root.attrib['Value']) if __name__ == "__main__": o_xml_test = XmlTest() o_xml_test.startSetPath(r'D:\note\Test\DEAL_XML\MY_TEST\test_xml') o_xml_test.addNewXmlNode() o_xml_test.writeXml() o_xml_test.printXml() o_xml_test.getXmlContent(r'D:\note\Test\DEAL_XML\MY_TEST\test_xml\1.xml') o_xml_test.printXml()
相关文章推荐
- XML 与 JSON 优劣对比
- As3.0 xml + Loader应用代码
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- C#针对xml基本操作及保存配置文件应用实例
- Ruby程序中创建和解析XML文件的方法
- asp下查询xml的实现代码
- sqlserver FOR XML PATH 语句的应用
- 使用sp_xml_preparedocument处理XML文档的方法
- EBS xml publisher中文乱码问题及解决办法
- C#中的Linq to Xml详解
- C#操作XML文件实例汇总
- SQL Server中的XML数据进行insert、update、delete
- C#实现将文件转换为XML的方法
- SQL Server中的XML数据进行insert、update、delete操作实现代码
- 关于SQLServer2005的学习笔记 XML的处理
- C#通过DataSet读写xml文件的方法
- C#实现基于XML配置MenuStrip菜单的方法
- php xml 入门学习资料