python的xml模块读取xml数据

发布于:2025-08-10 ⋅ 阅读:(29) ⋅ 点赞:(0)

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)