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)    收藏  举报

导航