Python_55之XML文件的操作(以python_myxml.xml(test.xml)博客内容为操作对象)

"""   访问XML文件进行解析
import requests
rslut=requests.get("http://www.weather.com.cn/data/sk/101110101.html") #发送请求
rslut.encoding="utf-8"
rss=rslut.text
print (rss)

from urllib import request
f=request.urlopen("http://www.weather.com.cn/data/sk/101110101.html")

result=f.read().decode('utf-8')
print (result)


rrr=requests.get("http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=846957456")
rlll=rrr.text
from xml.etree import ElementTree as ET
#解析XML格式内容
#XML接收一个参数:字符串 格式化为特殊的对象
node=ET.XML(rlll)
#json.loads(rlll)
if node.text=='Y':
print ('在线')
else:
print ('不在线')

"""
""" 解析一个XML文件
import requests
res=requests.get('http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=K1363&UserID=')
reslut=res.text
from xml.etree import ElementTree as ET
root=ET.XML(reslut)
for node in root.iter('TrainDetailInfo'):
#print (node.tag,node.attrib)
print (node.find('TrainStation').text,node.find('ArriveTime').text,node.find('StartTime').text,node.find('KM').text)
"""


"""查询自己写的XML文件
from xml.etree import ElementTree as ET
root=ET.XML(open('test.xml','r',encoding='utf-8').read())
print (root.tag)
for node in root:
print (node.tag,node.attrib)
"""


"""可以修改删除xml文件内容的XML文件解析方式
from xml.etree import ElementTree as ET
tree=ET.parse("test.xml")
root=tree.getroot()
print (root.tag)
for node in root.iter('calories'):
new_cl=float(node.text)+1
node.text=str(new_cl)
node.set('price','1234')#给‘calories’节点添加price属性
del node.attrib['price']#删除‘calories’节点的price属性
print (node.text)
tree.write("test.xml")#重新写入到了文件里
"""


"""操作XML文件的方式之删除节点"""
from xml.etree import ElementTree as ET
tree=ET.parse("test.xml")
root=tree.getroot()
print (root.tag)
print (dir(root))#找出root下的操作方法都哪些
for name in root.findall('food'):#找出菜谱的名字 这个意思就是找出根节点下的下一层目录名称
jiage=float(name.find('calories').text)#获取每一道菜的热量
if jiage<1000:
print ('健康菜')
else:
root.remove(name)#否则就删掉这个菜
tree.write("test.xml")#重新写入到了文件里


tag#节点名称
attrib#属性
find#查找
set #增加某个属性
iter#迭代循环出每个节点的下层节点
get#获取某个属性
append#添加子节点
clear#清空


创建XML文件
from xml.etree import ElementTree as ET
#创建根节点
new_xml=ET.Element("namelist")
#创建根节点的子节点
name1=ET.SubElement(new_xml,'name',attrib={'enrolled':'yes'})
age1=ET.SubElement(name1,'age',attrib={'checked':'no'})
sex1=ET.SubElement(name1,'sex')
sex1.text='33'
#创建根节点的子节点
name2=ET.SubElement(new_xml,'name',attrib={'enrolled':'no'})
age2=ET.SubElement(name2,'age')
age2.text='19'

et=ET.ElementTree(new_xml) #生成文档对象
et.write('test1.xml',encoding='utf-8',xml_declaration=True)
————————————生成——————————————————————————————————————————————————————————————
<?xml version='1.0' encoding='utf-8'?>
<namelist>
<name enrolled="yes">
<age checked="no" />
<sex>33</sex>
</name>
<name enrolled="no">
<age>19</age>
</name>
</namelist>
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
json模块的方法 :
loads() 将字符串类型的字典模式 转换为 字典之类的 加双引号
load 打开文件-读取内容——列表字典
dumps 将列表转换为字符串
dump 列表转换为字符串 写入文件内


————————————————————————————————————————————————————————————————————————————————————————————————————————————
XML
1、导入模块
2、发送请求,get到字符
3、字符串转换为XML
4、查看、修改、删除等操作,都是在内存中操作的
XML处理XML格式的数据:节点,一层一层的
最外边的叫根节点 次之 也是节点 这些节点是相同的数据类型,有相同的功能 tag text find iter get set write 等等相同的方法
修改之后只是保存在内存里,如果生效必须重新写入文件
创建XML文件


____________________________原xml文件内容test.xml————————————————————————————————————————————————————
<namelist ddd="'bn'">  dddddffdd
<name enrolled="yes">
<age checked="no"></age>
<sex>33</sex>
</name>
<name enrolled="no">
<age>19</age>
</name>
</namelist>
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

通过以下添加节点的操作
from xml.etree import ElementTree as ET
tree=ET.parse("test1.xml")
root=tree.getroot()
print (root.tag) #根节点名
print (root.attrib) #属性
print (root.text)#内容
#接下来创建一个新节点
son=root.makeelement('标签名',{'属性1':'属性值'})#分别是tag attrib
root.append(son)#在当前节点下追加一个节点
sunzi=son.makeelement('标签名sunzi',{'属性1sunzi':'属性值sunzi'})#分别是tag attrib
son.append(sunzi)
erzi=son.makeelement('标签名zi',{'属性1zi':'属性值zi'})#分别是tag attrib
root.append(erzi)#在当前节点下追加一个节点
tree.write('test.xml',encoding='utf-8',short_empty_elements=False)#写入文件内 设置为False是指可以使得标签带标签闭合
得到结果————————————————————————————————————————————————————————————————————————————————————————————

namelist
{'ddd': "'bn'"}
dddddffdd

这之后  test.xml文件的内容变化了——————————————————————————————————————————————————————

<namelist ddd="'bn'">  dddddffdd
<name enrolled="yes">
<age checked="no"></age>
<sex>33</sex>
</name>
<name enrolled="no">
<age>19</age>
</name>
<标签名 属性1="属性值">
<标签名sunzi 属性1sunzi="属性值sunzi"></标签名sunzi>
</标签名>
<标签名zi 属性1zi="属性值zi">
</标签名zi>
</namelist>
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

 

 根据字符串的创建例子:s="123zifuchuan"  或者s=str(123zifuchuan)  

我们可以推出这个节点的创建也可以是这样:

son=root.makeelement('标签名',{'属性1':'属性值'})#分别是tag   attrib   可以

son=ET.Element('标签名',{'属性1':'属性值'})#分别是tag   attrib  也可以
laozi.append(son) 这样就可以添加新节点了


rott=ET.Element('laozi')
son=ET.SubElement(root,'son',attrib={'shuxing1':'123'})
 

 创建有节点的XML文件的方法有三种就是以上的三种

XML有命名空间的方法:

<h:table xmlns:h="http://www.w3.org/TR/html4/">

 

</h:table>

这里 'h'就代指 http://www.w3.org/TR/html4/  ‘h’是一个前缀

先注册命名空间,

 

 

237

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



















232

posted on 2018-04-19 23:06  JuGooLar  阅读(170)  评论(0编辑  收藏  举报

导航