📜  python 解析 xml 字符串 - Python (1)

📅  最后修改于: 2023-12-03 14:46:18.351000             🧑  作者: Mango

Python 解析 xml 字符串

在 Python 中,我们可以使用 xml.etree.ElementTree 模块来解析 xml 字符串。该模块提供了方便的 API 来访问和操作 XML 数据。本文将介绍如何使用该模块来解析 xml 字符串。

准备工作

在开始之前,我们需要先安装 xml.etree.ElementTree 模块。如果你使用的是 Python 2.x 版本,你可能需要使用 elementtree 模块,该模块在 Python 2.x 版本中默认不包含。

以下是安装方式:

pip install elementtree  # for python 2.x
pip install xml.etree.ElementTree  # for python 3.x
解析 xml 字符串

让我们从一个简单的 XML 字符串开始:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <person>
        <name>John Smith</name>
        <age>30</age>
    </person>
    <person>
        <name>Jane Doe</name>
        <age>25</age>
    </person>
</root>

我们要解析这个 XML 字符串并访问其中的元素。

import xml.etree.ElementTree as ET

xml_string = '''<?xml version="1.0" encoding="UTF-8"?>
<root>
    <person>
        <name>John Smith</name>
        <age>30</age>
    </person>
    <person>
        <name>Jane Doe</name>
        <age>25</age>
    </person>
</root>'''

root = ET.fromstring(xml_string)

# 访问元素
for person in root.findall('person'):
    name = person.find('name').text
    age = person.find('age').text
    print(name, age)

输出:

John Smith 30
Jane Doe 25
解析 XML 文件

我们也可以使用 xml.etree.ElementTree 模块来解析 XML 文件。下面是一个示例 XML 文件 - data.xml

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <person>
        <name>John Smith</name>
        <age>30</age>
    </person>
    <person>
        <name>Jane Doe</name>
        <age>25</age>
    </person>
</root>

我们要解析 data.xml 文件并根据需要访问其中的元素。

import xml.etree.ElementTree as ET

tree = ET.parse('data.xml')
root = tree.getroot()

# 访问元素
for person in root.findall('person'):
    name = person.find('name').text
    age = person.find('age').text
    print(name, age)

输出:

John Smith 30
Jane Doe 25
总结

Python 中的 xml.etree.ElementTree 模块提供了方便的 API 来解析 XML 数据。我们可以使用 fromstring 方法解析 XML 字符串,或者使用 parse 方法解析 XML 文件。我们可以通过 find, findall, iter 等方法来访问 XML 元素,并使用 text, attrib 等属性来获取元素的内容和属性。

代码片段:

import xml.etree.ElementTree as ET

xml_string = '''<?xml version="1.0" encoding="UTF-8"?>
<root>
    <person>
        <name>John Smith</name>
        <age>30</age>
    </person>
    <person>
        <name>Jane Doe</name>
        <age>25</age>
    </person>
</root>'''

root = ET.fromstring(xml_string)

# 访问元素
for person in root.findall('person'):
    name = person.find('name').text
    age = person.find('age').text
    print(name, age)

import xml.etree.ElementTree as ET

tree = ET.parse('data.xml')
root = tree.getroot()

# 访问元素
for person in root.findall('person'):
    name = person.find('name').text
    age = person.find('age').text
    print(name, age)