首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从XML文件中自动获取相同类型的每个对象?

如何从XML文件中自动获取相同类型的每个对象?
EN

Stack Overflow用户
提问于 2021-07-29 16:07:29
回答 1查看 116关注 0票数 0

我正在尝试将XML文件解析为TXT文件。这是我的XML文件的样子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<annotation>
  <folder>training</folder>
  <filename>106310488.jpg</filename>
  <source>
    <database>synthetic initialization</database>
    <annotation>PASCAL VOC2007</annotation>
    <image>synthetic</image>
    <flickrid>none</flickrid>
  </source>
  <owner>
    <flickrid>none</flickrid>
    <name>none</name>
  </owner>
  <size>
    <width>1024</width>
    <height>681</height>
    <depth>3</depth>
  </size>
  <segmented>0</segmented>
  <object>
    <name>shell</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>234</xmin>
      <ymin>293</ymin>
      <xmax>281</xmax>
      <ymax>340</ymax>
    </bndbox>
 </object>
 <object>
    <name>shell</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>504</xmin>
      <ymin>302</ymin>
      <xmax>551</xmax>
      <ymax>349</ymax>
    </bndbox>
  </object>
  <object>
    <name>shell</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>776</xmin>
      <ymin>302</ymin>
      <xmax>823</xmax>
      <ymax>349</ymax>
    </bndbox>
  </object>
</annotation>

我感兴趣的信息在<object>中。我想要得到<bndbox>中的<name>和所有东西。这些是数据集中对象的名称和边界框坐标。我不知道每个XML文件中的<bndbox>都有<object>条目,所以我想编写一个获取所有条目的逻辑。

到目前为止,我的逻辑所做的就是只获取和处理第一次出现的<object><bndbox></bndbox></object>。如果XML文件中有任何其他边界框坐标,我的代码将直接跳过它。我不想这样。下面是我的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for annotations_file in annotations_dir:

  annotations = []
  milliseconds = int(time() * 1000)

  doc = ET.parse('/content/darknet/logorec/openlogo/Annotations/' + annotations_file) # Parsing the XML file
  
  new_annotations_file_name = annotations_file.split('.')[0] # Getting the name of the XML file without the file extension
  
  canvas = cv2.imread('/content/darknet/logorec/openlogo/JPEGImages/' + new_annotations_file_name + '.jpg') # Get the entire image
  
  canvas_shape = canvas.shape # Get the dimensions of the image
  
  root = doc.getroot() # Gets the root of the XML file
  
  annotations_box = root[6][4] # Gets the bounding box coordinates from the XML file

  class_name = root[6][0] # Name of the object within the bounding box
  class_name = class_name.text # Getting the text value

  for ant in annotations_box:
    annotations.append(ant.text) # Appending every sindle bounding box coordinate to an empty list
  
  ''' These are my annotations calculations for the YOLO model'''
  logo_shape_w = int(annotations[2]) - int(annotations[0])
  logo_shape_h = int(annotations[3]) - int(annotations[1])

  x1 = int(annotations[0]) # x1 = xmin
  y1 = int(annotations[3]) # y1 = ymax

  x2 = x1 + logo_shape_w
  y2 = y1 + logo_shape_h

  w = x2 - x1
  h = y2 - y1

  center_x = x1 + (w/2)
  center_y = y1 + (h/2)

  x = center_x / canvas_shape[0]
  y = center_y / canvas_shape[1]

  width = w / canvas_shape[0]
  height = h / canvas_shape[1]
  '''---------------------------------------------------------'''
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-29 16:37:37

使用xpath解析XML可以遍历objList项。仅显示第一个项目

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from lxml import etree                       
>>> tree = etree.parse('test.xml')                                                                                                              
>>> objList = tree.xpath('//object')
>>> bnd = objList[0].xpath('name | bndbox/*')
>>> for e in bnd:
...     e.text
... 
'shell'
'234'
'293'
'281'
'340'

迭代所有对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> for obj in objList:
...      bnd = obj.xpath('name | bndbox/*')
...      for e in bnd:
...          e.text
... 
'shell'
'234'
'293'
'281'
'340'
'shell'
'504'
'302'
'551'
'349'
'shell'
'776'
'302'
'823'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68584021

复制
相关文章
js中获取对象类型
<!DOCTYPE html> <html> <head> <title> </title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <script type="text/javascript"> let qq=new Object(); console.log(typeof qq); let arr=new Array(); console.lo
贵哥的编程之路
2020/10/28
21.7K0
ThreadLocal原理——实现多个线程从同一个对象获取相同类型对象实例
ThreadLocal,网传可以实现多线程变量安全共享。其实它只是一个半成品,其本身并没有提供变量安全共享,它实现了一个多线程从同一个对象获取相同类型对象实例的工具。
zhangheng
2020/04/28
3.2K0
Spring 如何从 IoC 容器中获取对象?
前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息。
WriteOnRead
2021/03/12
9.8K0
Spring 如何从 IoC 容器中获取对象?
【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )
创建 XmlParser 解析器 , 传入 Xml 文件对应的 File 对象 ;
韩曙亮
2023/03/30
7.2K0
【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )
CaseStudy(showcase)数据篇-从XML中获取数据
做silvelight也有一段时间了,相册、游戏,刚刚完成的showcase这个小程序算是一个阶段了。这里就以showcase这个项目来做一下CaseStudy。 数据篇-从XML中获取数据 这个项目
用户1172164
2018/01/16
4.5K0
如何从 100 亿 URL 中找出相同的 URL?
来源 | https://doocs.github.io/advanced-java/ 题目描述 给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G。请找出 a、b 两个文件共同的 URL。 解答思路 每个 URL 占 64B,那么 50 亿个 URL占用的空间大小约为 320GB。 5, 000, 000, 000 * 64B ≈ 5GB * 64 = 320GB 由于内存大小只有 4G,因此,我们不可能一次性把所有 URL 加载到内存中处理。对于这种类型的题
程序猿DD
2023/04/04
2.9K0
如何从 100 亿 URL 中找出相同的 URL?
从对象写入XML输出
InterSystems IRIS提供了用于为InterSystems IRIS对象生成XML输出的工具。可以指定XML投影的详细信息,如将对象投影到XML中所述。然后创建一个Writer方法,该方法指定XML输出的整体结构:字符编码、对象的显示顺序、是否包括处理指令等。
用户7741497
2022/07/04
9510
面试:如何从 100 亿 URL 中找出相同的 URL?
给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G。请找出 a、b 两个文件共同的 URL。
后端码匠
2020/09/07
4.6K0
XML中节点类型
该 Node 接口是整个文档对象模型的主要数据类型。它表示该文档树中的单个节点。当实现 Node 接口的所有对象公开处理子节点的方法时,不是实现 Node 接口的所有对象都有子节点。例如,Text 节点可能没有子节点,且将子节点添加到这样的节点将导致引发 DOMException。
sr
2018/08/20
1.2K0
XML中节点类型
mp中typeHandler自动获取字段类型
相熟的人表现出恭而敬之的样子总是叫人感到可笑。——歌德 一般我们在实体类上指定 @TableName(autoResultMap = true) 即可使用typeHandler指定转换器,然后就可以自动转换了 例如List<XXX>的Json可以如下使用: @TableField(typeHandler = JsonListHandler.class) private List<CalcUnitEnum> calcUnits; 这里JsonListHandler如下,JacksonUtil就懒得赘述了:
阿超
2023/03/23
1.3K0
Android笔记:如何解决java中的setPeekHeight()没有给出与xml中相同的结果?
当我将peek高度从这个xml更改为120dp时,我得到了正确的视图。但是当尝试从java做同样的事情时,我会得到不同的结果,即高度小于xml。 bottomSheetBehavior.setPeekHeight(120); 出现这样的问题是当然的,setPeekHeight()(以及许多其他大小/维度相关的方法)为其参数获取像素值。这意味着您需要先将dp值转换为px。执行此操作的最佳方法是定义dimen资源值,然后在代码中获取它:
程思扬
2022/01/10
9010
Android笔记:如何解决java中的setPeekHeight()没有给出与xml中相同的结果?
面试:如何从 100 亿 URL 中找出相同的 URL?
给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G。请找出 a、b 两个文件共同的 URL。
开发者技术前线
2020/11/24
2.3K0
面试:如何从 100 亿 URL 中找出相同的 URL?
python Class:获取对象类型
#!/usr/bin/env python3 # -*- coding: utf-8 -*-
py3study
2020/01/08
1.7K0
如何从列表中获取元素
观察URAM的物理管脚,不难发现A/B端口都有相应的地址、使能、读写控制信号。与BRAM不同的是URAM的读写使能信号是同一个管脚RDB_WR_A/B,其为0时执行读操作,为1时执行写操作,这意味着一旦A/B端口独立,同一端口的读写操作就无法同时发生,因此,如果采用上一篇文章中介绍的方法将其配置为两个独立的单端口RAM,其读写行为与常规的单端口RAM是不同的,进一步而言,此时的读写行为类似于NO_Change模式。
Lauren的FPGA
2019/10/30
17.5K0
根据bed文件从fasta文件中获取基因
第一次写博客,分享一个做的提取基因序列的程序,根据bed文件里的位置信息从基因组里提取序列
py3study
2020/02/10
2.7K0
获取对象具体类型的功能函数
HTML5学堂:JavaScript当中,时常会使用到typeof来进行数据类型的检测,但是我们觉得typeof不能够满足我们的需求,对于数组、函数、时间对象等,使用typeof返回的都是“object”,如果我们希望更进一步的检测要怎么办呢?一起来看吧~ toString方法 在JavaScript当中,想要判断一个对象值属于哪种内置对象,最靠谱的方法就是使用toString 先上代码 var str = 'HTML5学堂'; var arr = ['独行冰海', '梦幻雪冰']; var obj = {
HTML5学堂
2018/03/12
1.3K0
获取对象具体类型的功能函数
如何获取系统下目录的文件系统类型?
这个时候就要介绍下/proc/mounts文件:这个文件以/etc/mtab文件的格式给出当前系统所安装的文件系统信息。同时也能反映出任何手工安装从而在/etc/mtab文件中没有包含的文件系统。
嵌入式与Linux那些事
2023/03/24
1.3K0
如何获取系统下目录的文件系统类型?
如何从两个List中筛选出相同的值
问题 现有社保卡和身份证若干,想要匹配筛选出一一对应的社保卡和身份证。 转换为List<社保卡> socialList,和List idList,从二者中找出匹配的社保卡。 模型 创建社保卡类 /** * @author Ryan Miao */ class SocialSecurity{ private Integer id;//社保号码 private Integer idCard;//身份证号码 private String somethingElse; p
Ryan-Miao
2018/03/14
6.2K0
如何从两个List中筛选出相同的值
面试经历:如何从 100 亿 URL 中找出相同的 URL?
给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G。请找出 a、b 两个文件共同的 URL。
二哥聊运营工具
2021/12/17
1.9K0
点击加载更多

相似问题

如何从T类型的对象中获取xml节点?

10

如何从XML文件中获取对象的实例?

20

如何获取swf文件中每个对象的名称和类型?

11

从bean.xml文件中获取每个bean

15

如何从xml获取接口类型的对象列表

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文