python - xml解析获取数据
什么是 xml
xml(EXtensible Markup Language),可扩展标记语言。这种标记语言,类似 html,不同于 html,浏览器并不会解析显示 xml。
xml 主要是用于传输数据。xml 标签都不是预定义的,使用的时候根据自己的数据,定义的标签。
xml 是纯文本的,程序根据 xml 的标签来获取到对应的数据。
xml 的树形结构
例如:
<?xml version="1.0" encoding="ISO-8859-1"?>
<student>
<name>Opcai</name>
<age>28</age>
<courses>
<course name="English">98.3</course>
<course name="match">80.0</course>
</courses>
</student>
xml 的结构及是一个树形结构,从根开始,可以遍历到各个分支。
xml 必须包含根元素,根元素是其他元素的父元素。
python 解析 xml
在 Python 中可以使用 xml.dom 对 xml 进行解析。
文件对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展置标语言的标准编程接口。
一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用 DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入 xml 文件。
1、获取树形结构对象
import xml.dom.minidom
tree = xml.dom.minidom.parse("/tmp/1.xml")
root = tree.documentElement
print(root.nodeName)
print(root.nodeType)
print(root.nodeValue)
2、获取子节点
childNodes = root.childNodes
for node in childNodes:print(node)
3、通过标签名称查找
print(type(root))
searchNodes = root.getElementsByTagName("course")
for node in searchNodes:print(type(node))
这里可以看到查找到列表对象,跟 root 类型是一样的,因此可以想 root 一样去获取对应的数据。
4、获取标签属性
searchNodes = root.getElementsByTagName("course")
for node in searchNodes:print(node.getAttribute("name"))
5、获取标签的值
数据都在子节点中,在子节点才能获取到数据
searchNodes = root.getElementsByTagName("course")
for node in searchNodes:
if node.firstChild is not None:print(node.firstChild.data)
获取所有子节点的数据
searchNodes = root.getElementsByTagName("course")
for node in searchNodes:
for subchild in node.childNodes:
print(subchild.nodeValue)
总结
也可以进行创建写操作,只是太麻烦了。唉!还是 json 比较好操作,你觉得呢?
- 原文作者:Linux运维菜
- 原文链接:https://www.opcai.top/post/2019/2019-02/python_xml/
- 版权声明:本作品采用进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。