python 模块 xml
作者:互联网
1、xml包中的四个子包
- Python的核心XML支持。
- xml包的说明文档:https://docs.python.org/zh-cn/3.7/library/xml.html
1、dom包
- Document Object Model。适合用于处理DOM API。它能够将XML数据在内存中解析成一个树,然后通过对树的操作来操作XML。但是这种方式由于将XML数据映射到内存中的树,导致比较慢,且消耗更多内存。
- DOM的解析器在解析一个XML文档时,一次性读取整个文档,如果要处理的XML文本比较大的话,就会很耗内存,所以DOM一般偏向于处理一些小的XML,(如配置文件)比较快。
- dom中的模块
- xml.dom:DOM API定义
- xml.dom.minidom:最小的DOM实现
- xml.dom.pulldom:支持构建部分DOM树
2、SAX(simple API for XML)
- Python标准库中包含SAX解析器,SAX是用的是事件驱动模型,通过在解析XML过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
- 解析的基本过程:读到一个XML开始标签,就会开始一个事件,然后事件就会调用一系列的函数去处理一些事情,当读到一个结束标签时,就会触发另一个事件。所以,我们写XML文档入如果有格式错误的话,解析就会出错。
- 由于SAX以流式读取XML文件,一边读一边解析,速度较快,占用内存少,但是在操作上稍微复杂,需要用户实现回调函数。
- 适用场景如下:
- 1、对大型xml文件进行处理;
- 2、只需要文件的部分内容,或者只需从文件中得到特定信息。
- 3、想建立自己的对象模型的时候。
3、parsers包
- 用于XML解析器的Python包装器(目前只支持Expat)。
- xml.parsers.expat:Expat解析器绑定
4、etree包
- ElementTree XML库。这是完整ElementTree XML版本的一个子集。
- xml.etree.ElementTree: ElementTree API,一个简单而轻量级的XML处理器
2、etree包解析xml
- xml.etree.ElementTree模块实现了一个简单高效的API,用于解析和创建XML数据。
- xml.etree.ElementTree模块对于恶意构建的数据是不安全的。如果需要解析不可信或未经身份验证的数据,请参见XML漏洞。
1、XML树和元素
- XML是一种固有的分层数据格式,最自然的表示方法是使用树。为此,ET有两个类:ElementTree将整个XML文档表示为一个树,Element表示该树中的单个节点。与整个文档的交互(读写文件)通常在ElementTree级别完成。与单个XML元素及其子元素的交互是在Element级别完成的。
1、遍历xml文件
示例:
import xml.etree.ElementTree as ET tree = ET.parse("xmltest.xml") root = tree.getroot() #print(root)#<Element 'data' at 0x0000024CD0FF70E0> nodelst = [] def xmlread(root_node, level): note = [level, root_node.tag, root_node.attrib, root_node.text] nodelst.append(note) child_node = list(root_node) # print(child_node)#[<Element 'country' at 0x000001B53D1C61D0>, <Element 'country' at 0x000001B53D1E9360>, <Element 'country' at 0x000001B53D1E94F0>] if len(child_node) == 0: return for child in child_node: xmlread(child, level + 1) level = 1 xmlread(root, level) for i in nodelst: print(i)
标签:xml,node,解析,python,XML,模块,ElementTree,root 来源: https://www.cnblogs.com/maiblogs/p/14800005.html