python之XML模块
一.简介
二.解析XML
三.操作XML
四.创建XML
五.保存XML
一.简介
关于xml内容的操作,from xml.etree import ElementTree as ET
二.解析
两种方式得到xml
1.ElementTree.XML方法
a.先要通过网络请求或打开文件拿到xml字符串
#网络请求
import requests
answer = request.get('url')
answer.encoding='utf-8'
content = answer.text
#读取文件
content = open('filename','r',encoding='utf-8').read()
b.将xml字符串解析为xml
from xml.etree import ElementTree as ET xmlobj = ET.XML(content) #注意XML大写
2.ELementTree.parse与getroot方法
将文件解析为tree对象,再拿到其中的xml
from xml.etree import ElementTree as ET
treeobj = ET.parse('filename')
xmlobj = getroot(treeobj)
三、操作
创建Element
任意元素.makeelement(tagname,attrib)
或者 ET.Element(tagname,attrib)
添加element到某个element
a = 任意元素.makeelement(tagname,attrib) 某个元素.append(a)
创建代命名空间的Element
命名空间:
变量名的前缀太长时,用一个变量表示前缀,前缀只需写在父节点里
本来是
<xxxxxxxxxxxxx:tagname1>
<xxxxxxxxxxxxx:tagname2></xxxxxxxxxxxxx:tagname2>
</xxxxxxxxxxxxx:tagname1>
变为
<h:tagname1 xmlns:h='xxxxxxxxxxxxx'>
<h:tagname2></h:tagname2>
</h:tagname1>
创建具有命名空间的element
1.先创建前缀的变量
ET.register_namespace('h',"xxxxxxxx")
2.创建具有命名空间的element
root =ET.Element("{xxxxxxxx"}tagname1}
body = ET.SubElement(root,'{xxxxxx}tagname2', attrib={'{xxxxxxx}keyname':value}}
四、保存文件
有缩进的保存
1.导入新的模块有其方法
2.定义函数,借用模块中的方法
def prettify(root):
rough_string = ET.tostring(root,'utf-8') #Element转为string
reparsed = minidom.parseString(rough_string) #string装为reparsed对象
return reparsed.toprettyxml(indent='\t') #reparsed对象转为有缩进的string
3.调用函数,转为有缩进的string
pretty_str = prettify(root)
4.将string保存进文件
f= open(filename,mode,encoding='utf-8')
f.write(pretty_str)
f.close()
iter方法
用标签名迭代寻找指定的标签,返回由同名xml对象组成的半迭体,(会找所有后代标签)
a = xmlobj.iter('tagname')
find方法
用标签名找一个指定的标签,返回的还是xml对象(只会找子元素)
b = xmlobj.find('tagname')
remove方法
set
设置属性值
for node in xmlobj.iter(tagname):
node.set(属性名,属性值)
remove
删除后代标签中指定的标签 xmlobj.remove(tagname)
Element SubElement
创建根节点
new_xml = ET.Element(tagname)
subxml1 = ET.SubElement(new_xml,tagname,attrib={属性名:属性值})
subxml2 = ET.SubElement(new_xml,tagname,attrib={属性名:属性值})
subsubxml = ET.SubElement(subxml1,tagname)
subsubxml.tex t= value #为此元素添加内容
用赋值操作设置属性
内容为数字也是数字字符串,假如要对其加1
for i in xmlobj.iter(tagname):
new = int(i.text) + 1
i.text = str(new)
用del删除节点属性
for i in objxml.iter(tagname):
del i.attrib[属性名]
若无此属性会报错
posted on 2016-11-11 21:25 limpidstar 阅读(81) 评论(0) 收藏 举报
浙公网安备 33010602011771号