xml处理模块
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。
xml的格式如下,就是通过<>节点来区别数据结构的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?xml version = "1.0" ?> <data> <country name = "Liechtenstein" > <rank updated = "yes" > 2 < / rank> <year> 2008 < / year> <gdppc> 141100 < / gdppc> <neighbor name = "Austria" direction = "E" / > <neighbor name = "Switzerland" direction = "W" / > < / country> <country name = "Singapore" > <rank updated = "yes" > 5 < / rank> <year> 2011 < / year> <gdppc> 59900 < / gdppc> <neighbor name = "Malaysia" direction = "N" / > < / country> <country name = "Panama" > <rank updated = "yes" > 69 < / rank> <year> 2011 < / year> <gdppc> 13600 < / gdppc> <neighbor name = "Costa Rica" direction = "W" / > <neighbor name = "Colombia" direction = "E" / > < / country> < / data> |
xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import xml.etree.ElementTree as ET tree = ET.parse( "xmltest.xml" ) root = tree.getroot() print (root.tag) #遍历xml文档 for child in root: print (child.tag, child.attrib) for i in child: print (i.tag,i.text) #只遍历year 节点 for node in root. iter ( 'year' ): print (node.tag,node.text) |
修改文件内容
1 2 3 4 5 6 7 8 9 10 11 | import xml.etree.ElementTree as ET tree = ET.parse( "xmltest.xml" ) root = tree.getroot() print (root.tag) for node in root. iter ( 'year' ): new_year = int (node.text) + 1 node.text = str (new_year) node. set ( "updated" , "yes" ) tree.write( "xmltest_out.xml" ) |
删除文件内容:删除rank>50的country
1 2 3 4 5 6 7 8 9 | import xml.etree.ElementTree as ET tree = ET.parse( "xmltest.xml" ) root = tree.getroot() for country in root.findall( 'country' ): rank = int (country.find( 'rank' ).text) if rank > 50 : root.remove(country) tree.write( 'output.xml' ) |
自己创建xml文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import xml.etree.ElementTree as ET new_xml = ET.Element( "namelist" ) name = ET.SubElement(new_xml, "name" ,attrib = { "enrolled" : "yes" }) age = ET.SubElement(name, "age" ,attrib = { "checked" : "no" }) sex = ET.SubElement(name, "sex" ) age.text = '33' sex.text = 'male' name2 = ET.SubElement(new_xml, "name" ,attrib = { "enrolled" : "no" }) age = ET.SubElement(name2, "age" ) sex = ET.SubElement(name2, "sex" ) age.text = '19' sex.text = 'fmale' et = ET.ElementTree(new_xml) #生成文档对象 et.write( "test.xml" , encoding = "utf-8" ,xml_declaration = True ) ET.dump(new_xml) #打印生成的格式 |