Python 基础 - 标准模块xml

解析xml文件是必须要掌握的,有以下几种方式。无论什么时候还是建议读者多看官方文档,官方文档才是王道。xml.dom — The Document Object Model API — Python 3.11.1 documentation

目录

1. 使用xml.dom:xml.dom.minidom

2. 使用ElementTree(元素树): xml.etree.ElementTree


如果想要解析下面xml文件中红框框出来的部分,应该怎么解决?

1. 使用xml.dom:xml.dom.minidom

 DOM解析器在解析XML 文档时,通过读取整个文档,把文档中所有元素保存成一个树结构,之后利用DOM 提供的不同的函数来读取或修改xml的内容和结构。python中用xml.dom.minidom来解析xml文件,minidom比完整的DOM简单,而且要小很多。代码和解释如下:

import xml.dom.minidom

if __name__ == '__main__':
    '''
        getElementsByTagName("contour")root下所有tagName为contour的结果, 为NodeList。
        获取NodeList里面的元素使用: 该元素是element对象,所以使用item(idx)获取元素。
        获取element对象下的值:使用.childNodes[0], 返回Text对象,使用.data获取text值
        具体的element的相关属性可参考链接:https://docs.python.org/3/library/xml.dom.html#dom-element-objects
    '''
    xmlPath = './P2ILF22_patient1_1.xml'
    dom = xml.dom.minidom.parse(xmlPath)
    root = dom.documentElement  # 返回以contours为根的解析结果
    contour = root.getElementsByTagName("contour").item(0)
    imagePoints = contour.getElementsByTagName("imagePoints").item(0)
    ele_numOfPoints = imagePoints.getElementsByTagName("numOfPoints").item(0)
    ele_x = imagePoints.getElementsByTagName("x").item(0)
    ele_y = imagePoints.getElementsByTagName("y").item(0)
    val_numOfPoints = ele_numOfPoints.childNodes[0].data
    val_x = ele_x.childNodes[0].data
    val_y = ele_y.childNodes[0].data

Dom下objects的相关属性和方法可参考官方链接下的这个表格:xml.dom — The Document Object Model API — Python 3.11.1 documentation

2. 使用ElementTree(元素树): xml.etree.ElementTree

import xml.etree.ElementTree as et

if __name__ == '__main__':
    xmlPath = 'xxx.xml' # xml文件路径
    tree = et.parse(xmlPath) # 解析文件
    root = tree.getroot() # 获取到文件数的根
    Ridge_numOfPoints = root[1][1][0].text #其中[1][1][0]的具体位置看下图
    Ridge_numOfPoints_x = root[1][1][1].text
    Ridge_numOfPoints_y = root[1][1][2].text

 目前该方法在3.3版本后被弃用,如下官网截图:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值