什么是 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 比较好操作,你觉得呢?