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

如何使用Python的xml包获取XML文件中object节点的name值

如何读取XML中object节点下的name标签值?

目标XML内容

<annotation>
    <folder>JPEGImages</folder>
    <filename>L00030.png</filename>
    <path>D:\Annotation\Station1\S12508\JPEGImages\L00030.png</path>
    <source>
        <database>Unknown</database>
    </source>
    <size>
        <width>1280</width>
        <height>720</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>bezel</name>
        <pose>Unspecified</pose>
    </object>
    <object>
        <name>plate</name>
        <pose>Unspecified</pose>
    </object>
</annotation>

需求

提取所有<object>节点下<name>标签的文本值(即bezel和plate)。

现有尝试代码

import xml.etree.ElementTree as ET

xmlTree = ET.parse("file.xml")

elemList = []
for elem in xmlTree.iter():
    elemList.append(elem.tag)

目前仅能获取所有元素标签,无法提取对应文本值,求最佳实现方法。


解决方案

方法1:遍历object节点提取name文本

直接定位所有<object>节点,再从中获取<name>子节点的text属性:

import xml.etree.ElementTree as ET

xmlTree = ET.parse("file.xml")
root = xmlTree.getroot()

names = []
for obj in root.findall('object'):
    name_tag = obj.find('name')
    if name_tag is not None:
        names.append(name_tag.text)

print(names)  # 输出: ['bezel', 'plate']

方法2:基于iter()筛选目标标签

沿用你原有的iter()遍历方式,通过判断标签和父节点来筛选:

import xml.etree.ElementTree as ET

xmlTree = ET.parse("file.xml")

names = []
for elem in xmlTree.iter():
    if elem.tag == 'name' and elem.getparent().tag == 'object':
        names.append(elem.text)

print(names)

方法3:XPath表达式(简洁高效)

ElementTree支持XPath,可直接通过路径精准定位目标节点:

import xml.etree.ElementTree as ET

xmlTree = ET.parse("file.xml")
root = xmlTree.getroot()

names = [name.text for name in root.findall('./object/name')]

print(names)

其中方法3的XPath写法最简洁高效,代码量少且可读性强,是优先推荐的实现方式。


内容的提问来源于stack exchange,提问作者S Andrew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:54:31