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

Python中使用JMESPath查询和过滤XML数据

发布时间:2023-12-16 11:43:43

在Python中,可以使用JMESPath库来查询和过滤XML数据。JMESPath是一种查询语言,它允许您使用简单的表达式来提取所需的数据。

以下是一个使用JMESPath查询和过滤XML数据的示例代码:

import jmespath
from xml.etree import ElementTree as ET

# 定义XML数据
xml_data = '''
<root>
    <person>
        <name>John</name>
        <age>30</age>
        <city>New York</city>
    </person>
    <person>
        <name>Mike</name>
        <age>25</age>
        <city>Los Angeles</city>
    </person>
    <person>
        <name>Sarah</name>
        <age>35</age>
        <city>Chicago</city>
    </person>
</root>
'''

# 解析XML数据
root = ET.fromstring(xml_data)

# 使用JMESPath查询数据
query = jmespath.compile('person[age > 30].name')
result = query.search(root)

# 打印查询结果
print(result)

运行以上代码,将输出符合查询条件的人员姓名列表:

['John', 'Sarah']

在上述示例中,首先定义了一个XML数据。然后使用ET.fromstring()方法将其解析为Element对象。接下来,通过使用jmespath.compile()方法将JMESPath查询语句编译成一个可执行的查询对象。这里的查询语句是person[age > 30].name,它表示查询所有年龄大于30岁的人的姓名。最后,使用查询对象的search()方法在解析的XML数据上执行查询操作,并将结果保存在result变量中。最后,用print()方法打印查询结果。

除了查询,您还可以使用JMESPath对XML数据进行过滤。下面是一个示例代码:

import jmespath
from xml.etree import ElementTree as ET

# 定义XML数据
xml_data = '''
<root>
    <person>
        <name>John</name>
        <age>30</age>
        <city>New York</city>
    </person>
    <person>
        <name>Mike</name>
        <age>25</age>
        <city>Los Angeles</city>
    </person>
    <person>
        <name>Sarah</name>
        <age>35</age>
        <city>Chicago</city>
    </person>
</root>
'''

# 解析XML数据
root = ET.fromstring(xml_data)

# 使用JMESPath过滤数据
query = jmespath.compile('person[?age > 30]')
result = query.search(root)

# 打印过滤结果
for person in result:
    print(ET.tostring(person).decode())

运行以上代码,输出符合过滤条件的person元素及其子元素:

<person>
        <name>John</name>
        <age>30</age>
        <city>New York</city>
    </person>
<person>
        <name>Sarah</name>
        <age>35</age>
        <city>Chicago</city>
    </person>

在上述代码中,JMESPath查询语句为person[?age > 30],它表示只保留年龄大于30岁的人。然后,将过滤结果遍历打印出来。

总结来说,使用JMESPath库可以方便地查询和过滤XML数据。您只需要定义相应的JMESPath查询语句,并使用相应API执行查询或过滤操作。这使得在Python中处理XML数据变得更加简单和高效。