无法使用python获取xml文件的元素值

时间:2018-11-08 12:57:00

标签: python xml python-3.x xml-parsing

我正在开发一个必须解析一些值的程序。 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>

它提供空白输出。谁能为我解决?

1 个答案:

答案 0 :(得分:2)

来自ElementTree documentation

  

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