欢迎访问宙启技术站
智能推送

Python中如何将XML格式的字符串转换为字典或列表

发布时间:2024-01-04 06:34:20

在Python中,我们可以使用xml.etree.ElementTree模块将XML格式的字符串转换为字典或列表。下面是一个示例,演示如何使用该模块将XML字符串转换为字典或列表。

首先,我们需要导入xml.etree.ElementTree模块。

import xml.etree.ElementTree as ET

接下来,我们定义一个函数xml_to_dict,它将接受一个XML字符串作为参数,并返回一个相应的字典或列表。

def xml_to_dict(xml_string):
    root = ET.fromstring(xml_string)
    return _recursive_dict(root)

在上述函数中,我们首先使用ET.fromstring()函数将XML字符串解析为一个根元素对象。然后,我们调用一个递归函数_recursive_dict()来将根元素对象及其子元素转换为字典。

def _recursive_dict(element):
    if len(element) == 0:
        return element.text
    result = {}
    for child in element:
        child_result = _recursive_dict(child)
        if child.tag in result:
            if isinstance(result[child.tag], list):
                result[child.tag].append(child_result)
            else:
                result[child.tag] = [result[child.tag], child_result]
        else:
            result[child.tag] = child_result
    return result

在上述递归函数中,如果当前元素没有子元素,我们将返回该元素的文本内容。否则,我们将创建一个空字典result来存储当前元素及其子元素的信息。对于每个子元素,我们将递归地调用递归函数,并根据子元素的标签将其添加到result字典中。如果子元素的标签在result字典中已存在,我们将其转换为列表处理。

接下来,我们可以使用上述函数将XML字符串转换为字典或列表。

xml_string = '''
<root>
  <person>
    <name>John</name>
    <age>30</age>
  </person>
  <person>
    <name>Jane</name>
    <age>25</age>
  </person>
</root>
'''

result = xml_to_dict(xml_string)
print(result)

上述代码将打印以下结果:

{
  'person': [
    {'name': 'John', 'age': '30'},
    {'name': 'Jane', 'age': '25'}
  ]
}

可以看到,XML字符串被转换为了一个字典,其中每个person元素都被转换为一个字典对象,字典对象之间又保存在一个列表中。

通过上述方法,我们可以方便地将XML格式的字符串转换为字典或列表,以便于在Python中进行处理和操作。