如何使用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
相关产品推荐
相关产品推荐

