python第三方模块 -- xmltodict模块

2023-09-25 10:31:11 浏览数 (2)

在实际的中,有时候需要xml转成dict方便后续处理,那么如何实现呢?可以用xmltodict,安装方式:

代码语言:javascript复制
pip3 install xmltodict

我们看下如何使用

代码语言:javascript复制
import xmltodict
import json

xml_str = '''<school>
    <teachers>
        <teacher>
            <name>leizi</name>
            <course>englist</course>
        </teacher>
        <teacher>
            <name>Bob</name>
            <course>PE</course>
        </teacher>
    </teachers>
    <students>
        <student>
            <name>张三1</name>
            <sex>男</sex>
            <age>19</age>
        </student>
        <student>
            <name>李四2</name>
            <sex>女</sex>
            <age>29</age>
        </student>
    </students>
</school>'''

new_dict_obj = xmltodict.parse(xml_str)  # 返回一个OrderedDict类型的对象
json_str = json.dumps(new_dict_obj)  # 使用内置的json模块转换成json
print(new_dict_obj)
print(json_str)

看下最后的结果

代码语言:javascript复制
OrderedDict([('school', OrderedDict([('teachers', OrderedDict([('teacher', [OrderedDict([('name', 'leizi'), ('course', 'englist')]), OrderedDict([('name', 'Bob'), ('course', 'PE')])])])), ('students', OrderedDict([('student', [OrderedDict([('name', '张三1'), ('sex', '男'), ('age', '19')]), OrderedDict([('name', '李四2'), ('sex', '女'), ('age', '29')])])]))]))])
{"school": {"teachers": {"teacher": [{"name": "leizi", "course": "englist"}, {"name": "Bob", "course": "PE"}]}, "students": {"student": [{"name": "u5f20u4e091", "sex": "u7537", "age": "19"}, {"name": "u674eu56db2", "sex": "u5973", "age": "29"}]}}}

那如何转成xml,直接上代码

代码语言:javascript复制
new_xml = xmltodict.unparse(new_dict_obj)# 这里直接放dict对象,不要放json字符串
print(new_xml)

结果:

代码语言:javascript复制
<?xml version="1.0" encoding="utf-8"?>
<school>
   <teachers>
    <teacher>
    <name>leizi</name>
    <course>englist</course>
    </teacher>
    <teacher>
    <name>Bob</name>
    <course>PE</course>
    </teacher>
    </teachers>
    <students>
    <student>
    <name>张三1</name>
    <sex>男</sex>
    <age>19</age>
    </student>
    <student>
    <name>李四2</name>
    <sex>女</sex>
    <age>29</age>
    </student></students></school>

可以发现在打印结果的时候

增加了一个

代码语言:javascript复制
<?xml version="1.0" encoding="utf-8"?>

当然了这些还可以读写带文件中的,增加对应的文件操作即可

0 人点赞