1. 什么是XML?
xml是格式化的纯文本,用于存储数据和格式。
2. DOM是什么?
DOM是xml的一种解析方法(此外还包括SAX等,此处不提),它将xml文件抽象成为一个树型结构,这棵树个各个树叶就是节点。也就是说,DOM 定义了所有文档元素的对象和属性,以及访问它们的方法(接口)。
DOM的主要性质:
- 文档是一个文档节点,即根节点,对象树型是domTree.documentElement
- 每个 XML 标签是一个元素节点,元素节点接口方法见链接, 主要包括的方法和属性有:
- getElementsByTagName():根据tag获取elements
- getAttributeNode():获取特定属性值
- childNodes:子节点的nodelist
- ...
- 包含在 XML 元素中的文本是文本节点
- 每一个 XML 属性是一个属性节点
- 注释属于注释节点
3. 使用dom解析xml例程
- 例程说明
“博主用了一个图像标注系统CVAT进行车道线的标注,如下图,系统输出的标注结果就是一个xml文件。我们的label有6类,'left_3', 'left_2', 'left_1', 'right_1', 'right_2', 'right_3'。我们的工作就是解析xml文件。”
我的xml文件如下所示, 可以复制下来进行代码测试。
<?xml version="1.0" encoding="utf-8"?>
对应的原始图像在下面
2. xml文件说明
为了方便可以使用浏览器打开,是下面这样的格式。可以看到,根节点就是annotations, 其子节点包括version、meta、image等等,其中meta->task->labels是我们规定的标注规范中的label类别,包括"left_3"...."right_3"等。另外各个image节点就是我们对应的每一张图像的标注结果,子元素节点包括多个polyline,每个polyline就是一条车道线,采用str类型的点对表示。另外,image节点中包含了"id","name","width","height"等等属性节点,我们可以通过"name"属性节点找到对应的图像名称。
3. 上代码
#-*-coding:utf-8-*-
运行脚本结果如下图所示,各个车道线分别由不同的点集组成。
总结
DOM将XML看成一个节点,节点类型包括元素节点,文本节点等,解析过程就是利用element类的各种属性和方法来得到想要的值的过程。
码字不易,觉得不错的看官就点个赞再走吧~
参考文献:
- xml dom课程,w3school
- xml中element的属性和方法
- cvat图像标注系统