python3 xml模块


一.XML简介:

XML 指可扩展标记语言(eXtensible Markup Language),是实现不同语言或程序之间进行数据交换的协议,XML文件格式如下:

<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year age="18" name="calvin">2028</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year age="18" name="calvin">2031</year>
        <gdppc>59900</gdppc>
        <neighbor direction="N" name="Malaysia" />
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year age="18" name="calvin">2031</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
    </country>
</data>

  




二.XML操作
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from xml.etree import ElementTree as ET
from xml.dom import minidom #跟ElementTree类似,性能不好,提供了一个格式化xml的功能

#检查QQ登录状态
#使用第三方模块requests发送http请求,或者XML格式内容
r=requests.get("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=471749572")
result=r.text  #字符串类型
# result=json.loads(r.text)
# print(type(result),result)
print(result)
View Code

 



更多关于requests模块请猛击这里



#解析XML内容
#XML接收一个参数:字符串,将字符串转换为特殊对象

node=ET.XML(result)

#获取内容
if node.text=="Y":
print("在线")
else:
print("离线")

#解析字符串方式,修改保存
for node in root.iter("year"):
    new_year=int(node.text)+1
    node.text=str(new_year)
    node.set("name","calvin")  #增加name属性
    node.set("age","18") #增加age属性
    node.get("name")
    # del node.attrib["name"] #删除name属性
tree.write("xml_exemple.xml")  #将以上修改的内容写入到xml文件
View Code

 




# 解析文件的方式,并对xml文件就行修改
# 打开并解析xml文件内容
tree=ET.parse("xml_exemple.xml")
#获取根节点
root=tree.getroot()
#迭代循环查找year信息并修改year
for node in root.iter("year"):
    new_year=int(node.text)+1
    node.text=str(new_year)
    node.set("name","calvin")  #增加name属性
    node.set("age","18") #增加age属性
    node.get("name")
    # del node.attrib["name"] #删除name属性
tree.write("xml_exemple.xml")  #将以上修改的内容写入到xml文件
View Code
 
1.创建xml文件

# 创建根节点
root = ET.Element("family")
 
#创建节点大儿子
son1 = ET.Element('son', {'name': 'kobe'})
# 创建节点小儿子
son2 = ET.Element('son', {"name": 'calvin'})

# 在两个儿子中分别创建两个孙子
grandson1 = ET.Element('grandson', {'name': 'kobe_jr','age':"8"})
grandson2 = ET.Element('grandson', {'name': 'calvin_jr','age':"24"})
son1.append(grandson1)
son2.append(grandson2)

# 把儿子添加到根节点中
root.append(son1)
root.append(son2)

tree = ET.ElementTree(root)
tree.write('family_tree.xml',encoding='utf-8', short_empty_elements=False)
2.新增节点有两种方式

tree=ET.parse("xml_exemple.xml")
# 一切皆对象,对象都由类创建,对象所有的功能都跟在与其相关的类中
# 1、tree这个对象由ElementTree类创建,tree等同于ElementTree()
# 2、getroot()获取xml根节点
# 3、write()将内存中的xml写入到文件

#获取根节点
root=tree.getroot()
#第一种方式:调用makeelement对象创建节点,创建的节点类型为Element类型
# s=root.makeelement("test",{"k1":"v1"})
# ss=s.makeelement("test02",{"k2":"v2"})
#第二种方式:直接用element类创建,与上面用makeelement函数创建节点一样
s=ET.Element("test",{"k1":"v1"})
ss=ET.Element("test02",{"k2":"v2"})
root.append(s)
s.append(ss)
tree.write("xml_exemple.xml")

3.格式化创建的xml文件
#创建xml文件


# 创建根节点
root = ET.Element("family")

# 创建节点大儿子
son1 = ET.Element('son', {'name': '科比'})
# 创建节点小儿子
son2 = ET.Element('son', {"name": 'calvin'})

# 在两个儿子中分别创建两个孙子
grandson1 = ET.Element('grandson', {'name': 'kobe_jr','age':"8"})
grandson2 = ET.Element('grandson', {'name': 'calvin_jr','age':"24"})
son1.append(grandson1)
son2.append(grandson2)

# 把儿子添加到根节点中
root.append(son1)
root.append(son2)

tree = ET.ElementTree(root)
tree.write('family_tree.xml',encoding='utf-8', short_empty_elements=False,xml_declaration=True)
#定义函数用于格式化xml文件内容

def MyWrite(elem,file_path):
    rough_string = ET.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    new_str= reparsed.toprettyxml(indent="\t")
    f=open(file_path,'w',encoding='utf-8')
    f.write(new_str)
    f.close()

MyWrite(root,'new_family.xml')
View Code

 

 



免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM