xml是实现不同语言或程序直接进行数据交换的协议,跟Json差不多,和HTML一样都属于标签语言。Xml必须有一个根节点元素,并且根节点元素不能为xml,区分大小写。本篇幅主要学习Python的ElementTree模块,该模块是用来处理xml文件的。
xml文件中的标签分两种,一种是自闭和标签,另外一种是非闭合标签。
自闭和标签:<rank>11111</rank>
非闭合标签<neighbor name=“suy” />
xml文件举例:
<?xml version="1.0" encoding="UTF-8" ?>
<page>
<database name="testdb">
<table name="263login">
<sql id="select">
SELECT * FROM 263login WHERE id=%s
</sql>
<sql id="delete">
DELETE * FROM 263login WHERE id=%s
</sql>
</table>
<table name="product">
<sql id="000select">
SELECT * FROM 000login WHERE id=%s
</sql>
<sql id="000delete">
DELETE * FROM 000login WHERE id=%s
</sql>
</table>
</database>
</page>
打印根标签名字
import xml.etree.ElementTree as ET
# 用parse()方法将xml文件解析为tree对象,一个ElementTree对象
tree = ET.parse('../testFile/SQL.xml')
# 获取到根节点对象,一个Element对象
root = tree.getroot()
# 打印根节点的tag
print(root.tag)
用for循环查看root下面的内容
for r in root:
print(r)
查看root下的标签名字:
for r in root:
print(r.tag)
打印再低一级的标签名字:
for r in root:
for n in r:
print(n.tag)
用for循环查看root下的属性
for n in root:
print(n.attrib)
打印再低一级的属性:
for r in root:
for n in r:
print(n.attrib)
text标签实际包裹的内容
# text属性打印包裹的内容
for r in root:
for n in r:
for i in n:
print(i.text)
使用tag名称访问
# n.iter("sql") 查找的是所有的子孙后代标签名为sql的节点
for r in root:
for n in r:
for i in n.iter("sql"):
print(i.tag, i.text)
findall()方法只查找直接的孩子,然后可以用for遍历
print(root.findall('database'))
print(root[0].findall('table'))
使用下标查找tag或者属性或者text
print(root[0].tag)
print(root[0][0].tag)
print(root[0][0][0].tag)
print(root[0].attrib)
print(root[0][1].attrib)
print(root[0][0][0].text.strip())
print(len(root[0][0]))
fromstring用法
从字符串常量中解析XML,与XML()方法解析的方式也一样,它们返回的都是一个Element实例
data = open(r'../testFile/SQL.xml').read()
root = ET.fromstring(data)
print("root对象:",root)
修改或新增xml的属性
root[0].set('name','testdb')
# 改完之后保存
tree.write('../testFile/SQL.xml')
print('-' * 50)