我正在开发一个必须解析一些值的程序。 xml如下:
this.router.navigate(['tabs(profile:profile)']);
我需要解析<?xml version="1.0" encoding="UTF-8"?>
<annotation>
<folder>leaf_Haritaki</folder>
<filename>Haritaki_010001.png</filename>
<segmented>0</segmented>
<size>
<width>1456</width>
<height>2592</height>
<depth>3</depth>
</size>
<object>
<name>Haritaki</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>316</xmin>
<ymin>301</ymin>
<xmax>1179</xmax>
<ymax>1964</ymax>
</bndbox>
</object>
</annotation>
<xmin>
<ymin>
<xmax>
我已经尝试过此代码。但是我没有发现任何价值。
<ymax>
它提供空白输出。谁能为我解决?
答案 0 :(得分:2)
Element.findall()
仅查找带有标签的元素,这些元素是当前元素的直接子元素。
您正在搜索嵌套元素,因此findall()
不能从根目录中找到。也就是说,除非您使用XPath expression。
表达式.//bndbox
将在树中的任何位置找到元素。您可能希望查找并处理子元素,找到 all 后可以从它们中获取名称。 .//bbndbox/*
将找到所有子元素:
>>> root.findall('.//bndbox')
[<Element 'bndbox' at 0x10c1775e8>]
>>> root.findall('.//bndbox/*')
[<Element 'xmin' at 0x10c177638>, <Element 'ymin' at 0x10c177688>, <Element 'xmax' at 0x10c1776d8>, <Element 'ymax' at 0x10c177728>]
使用它来创建字典(具有字典理解);您甚至可以在此时将包含的文本转换为整数:
box = {e.tag: int(e.text) for e in root.findall('.//bndbox/*')}
演示:
>>> box = {e.tag: int(e.text) for e in root.findall('.//bndbox/*')}
>>> box
{'xmin': 316, 'ymin': 301, 'xmax': 1179, 'ymax': 1964}
>>> box['xmin']
316