一.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)
更多关于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文件
# 解析文件的方式,并对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文件
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')