python xml解析
现有xml格式文件一份内容如下
<data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2023</year> <gdppc>141100</gdppc> <neighbor direction="E" name="Austria" /> <neighbor direction="W" name="Switzerland" /> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2026</year> <gdppc>59900</gdppc> <neighbor direction="N" name="Malaysia" /> </country> </data>
解析xml文件
from xml.etree import ElementTree tree = ElementTree.parse("test.xml") root = tree.getroot() #得到根元素 for child in root: print(child.tag, child.attrib) #输出子元素下的tag和属性 for gradechild in child: print(gradechild.tag, gradechild.text) #输出子元素的子元素的tag和文本内容 #运行输出 country {'name': 'Liechtenstein'} rank 2 year 2023 gdppc 141100 neighbor None neighbor None country {'name': 'Singapore'} rank 5 year 2026 gdppc 59900 neighbor None
修改xml内容
from xml.etree import ElementTree str_xml = open("test.xml", "r").read() root = ElementTree.XML(str_xml) for node in root.iter("year"): #文本内容+1 new_year = int(node.text) + 1 node.text = str(new_year) #设置属性 node.set("name", "testuser") node.set("age", "18") del node.attrib["name"] #把字符串的类型的xml保存到文件 tree = ElementTree.ElementTree(root) tree.write("new.xml", encoding="utf-8")
创建xml文件
from xml.etree import ElementTree from xml.dom import minidom def prettify(elem): """将节点转换成字符串,并添加缩进""" rough_string = ElementTree.tostring(elem, 'utf-8') reparsed = minidom.parseString(rough_string) return reparsed.toprettyxml(indent="\t") root = ElementTree.Element("family") #创建儿子 son1 = ElementTree.Element("son", {"name": "xiao A"}) son2 = ElementTree.Element("son", {"name": "xiao B"}) #创建孙子 grandson1 = ElementTree.Element("son", {"name": "xiao C"}) grandson2 = ElementTree.Element("son", {"name": "xiao D"}) #把孙子加到儿子 son1.append(grandson1) son1.append(grandson2) #son1.insert(0, grandson2) #把儿子加到root中 root.append(son1) root.append(son2) tree = ElementTree.ElementTree(root) # tree.write("new1.xml", encoding="utf-8", xml_declaration=True, short_empty_elements=False) raw_str = prettify(root) with open("new2.xml", "w+", encoding="utf-8") as f: f.write(raw_str)
把字典转成xml文件
>>> from xml.etree import ElementTree >>> def dict_to_xml(tag, d): ... ele = ElementTree.Element(tag) ... for key, val in d.items(): ... child = ElementTree.Element(key) ... child.text = str(val) ... ele.append(child) ... return ele ... >>> s = { 'name': 'GOOG', 'shares': 100, 'price':490.1 } >>> e = dict_to_xml('stock', s) >>> e <Element 'stock' at 0x0000000002698908> >>> print(e.tag) stock >>> print(e.attrib) {} >>> for i in e: ... print(i.tag) ... name price shares >>>