You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python获取XML中level元素内带实体与值的元素值

嘿,我来给你捋捋怎么用Python搞定这个XML提取的需求!要获取<level>元素内那些带实体(属性)和值的元素内容,咱们可以用Python的标准库或者更强大的第三方库来实现,下面给你详细说说两种常用方法:

先补全一下你的示例XML(方便演示)

假设你的完整XML片段是这样的(补全了<level>内的元素):

<observations>
  <station wmo-id="94576" bom-id="040913" tz="Australia/Brisbane" stn-name="BRISBANE" stn-height="8.13" type="AWS" lat="-27.4808" lon="153.0389" forecast-district-id="QLD_PW015" description="Brisbane">
    <period index="0" time-utc="2018-03-29T05:50:00+00:00" time-local="2018-03-29T15:50:00+10:00" wind-src="OMD">
      <level index="0" type="surface">
        <element type="air_temp" units="C">23.5</element>
        <element type="dew_point" units="C">19.2</element>
        <element type="wind_speed" units="km/h">15</element>
      </level>
    </period>
  </station>
</observations>

方法一:用标准库xml.etree.ElementTree(无需额外安装)

这是Python自带的XML解析库,足够应付大多数简单场景:

1. 解析XML内容

你可以从字符串或者本地文件解析XML:

import xml.etree.ElementTree as ET

# 从字符串解析(如果是本地文件,用ET.parse('your_file.xml').getroot())
xml_str = """
<observations>
  <station wmo-id="94576" bom-id="040913" tz="Australia/Brisbane" stn-name="BRISBANE" stn-height="8.13" type="AWS" lat="-27.4808" lon="153.0389" forecast-district-id="QLD_PW015" description="Brisbane">
    <period index="0" time-utc="2018-03-29T05:50:00+00:00" time-local="2018-03-29T15:50:00+10:00" wind-src="OMD">
      <level index="0" type="surface">
        <element type="air_temp" units="C">23.5</element>
        <element type="dew_point" units="C">19.2</element>
        <element type="wind_speed" units="km/h">15</element>
      </level>
    </period>
  </station>
</observations>
"""
root = ET.fromstring(xml_str)

2. 提取<level>内的元素属性和值

用XPath语法定位到<level>元素,再遍历它的子元素,获取属性(实体)和文本内容(值):

# 找到所有<level>元素
all_levels = root.findall('.//level')

for level in all_levels:
    print(f"当前处理的level索引: {level.get('index')}")
    # 遍历level下的所有子元素
    for elem in level:
        # 获取元素的属性(比如type、units)
        elem_type = elem.get('type')
        elem_units = elem.get('units')
        # 获取元素的文本值
        elem_value = elem.text.strip()
        print(f"实体类型: {elem_type}, 单位: {elem_units}, 值: {elem_value}")

运行这段代码,你就能看到每个元素的属性和对应值了。

方法二:用lxml库(更强大的XPath支持)

如果你的XML有命名空间,或者需要更复杂的查询,lxml会更顺手。先安装它:

pip install lxml

然后用下面的代码实现:

from lxml import etree

# 解析XML字符串
root = etree.fromstring(xml_str)

# 直接用XPath获取所有<level>下的子元素
level_children = root.xpath('//level/*')

for elem in level_children:
    # 获取元素的所有属性
    elem_attrs = elem.attrib
    # 获取元素的文本值
    elem_value = elem.text.strip()
    print(f"属性集合: {elem_attrs}, 值: {elem_value}")

# 还可以精准定位特定属性的元素,比如获取气温值
air_temp_value = root.xpath('//level/element[@type="air_temp"]/text()')[0]
print(f"当前气温: {air_temp_value}°C")

几个小提醒

  • 如果你的XML包含命名空间,记得在查询时添加命名空间映射,比如:
    # ElementTree的写法
    ns = {'obs': 'http://your-namespace-url.com'}
    all_levels = root.findall('.//obs:level', namespaces=ns)
    
  • 确保XML格式合法,比如标签要闭合,否则解析会报错。

内容的提问来源于stack exchange,提问作者Derek Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:27:10