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 了
标签:XML,xml,xmlns,python,text,xxx,ns,解析
From: https://www.cnblogs.com/tggpx/p/18154607