python XML 文件解析

XML 文件认识

<a xmlns:ns="xxx" attr1="33">
  <ns:b>1
    <c>2
      <d/>3
    </c>
  </ns:b>4
</a>

xml每个节点可以分为

  • tag : a,ns:b,c,d都是tag
  • text : 1,2是text
  • tail : 3,4是tail.3是属于d的tail,4是ns:b的tail
  • attrib : 必须是键值对(key=value),定义在标签<>中,attr1="33"就是a的attrib

一些特殊的case

  • 命名空间
    xmlns:ns="xxx" 也符合attrib的定义但是它不是,xmlns是特殊的关键字,它定义了命名空间ns,在后面使用find族函数查找节点b时需要传入命名空间否则找不到,并且b的tag是{xxx}b而不是ns:b. xxx是上面定义的ns的值.
  • <d/> 是自闭合节点相当于是<d></d>的简写.

解析XML

了解XML结构后解析它就简单了,主要步骤就是 定位加获取需要的值(通常是text)
下面是解析XML会用到的一些API

import xml.etree.ElementTree as ET

# 有使用xmlns的需要先获取namespace
# 可以用这个正则表达式去匹配 xmlns:(\w+) ?= ?"(.*)"

xml_tree = ET.parse(xml_file) #得到xml tree 用于文件级别的操作
root_elment = xml_tree.getroot()
b_elment = root.findall("ns:b",namespace) #如果没用xmlns就不要第二个参数
#namespace是用正则表达式匹配到的,类似这样 {'ns'='xxx'}
#find or findall 只能找到当前节点的下一层,更下层的不会搜索,find只返回找到的第一个,findall返回所有

b_elment.text #就可以获取到 1 了

posted @ 2024-04-24 14:05  天刚刚破晓  阅读(69)  评论(0)    收藏  举报