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
>>>
浙公网安备 33010602011771号