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
>>>

posted on 2016-06-22 17:53  逸秋  阅读(62)  评论(0编辑  收藏  举报

导航