# -*- coding:utf-8 -*-
'''''
created on 2010-4-20
@author: 憂裡修斯
'''import xml.etree.elementtree as et
import xml.dom.minidom as minidom
from addrbook.domain import person
class converter(object):
'''''
實現python物件與xml之間的相互轉換
'''root = none#根節點
def __init__(self):
pass
@staticmethod
def createroot(roottag):
'''''
建立根節點
'''root = et.element(roottag)
return root
@staticmethod
def getxmlstring(element,defaultencoding='utf-8'):
'''''
根據節點返回格式化的xml字串
'''try:
rough_string = et.tostring(element, defaultencoding)
reparsed = minidom.parsestring(rough_string)
return reparsed.toprettyxml(indent=" " , encoding=defaultencoding)
except:
print 'getxmlstring:傳入的節點不能正確轉換為xml,請檢查傳入的節點是否正確'
return ''
@staticmethod
def classtoelements(classobj,roottag=none):
'''''
根據傳入的物件的例項,根據物件的屬性生成節點,返回由節點組成的列表
classobj:物件的例項程式設計客棧
roottag:根節點名稱
'''attrs = none#儲存物件的屬性集
elelist = #節點列表
try:
attrs = classobj.__dict__.keys()#獲取該物件的所有屬性(即成員變數)
except:
print 'classtoelements:傳入的物件非法,不能正確獲取物件的屬性'
if attrs != none and len(attrs) > 0:#屬性存在
for attr in attrs:
attrvalue = getattr(classobj, attr)#屬性值
#屬性節點
attre = et.element(attr)
程式設計客棧 attre.text = attrvalue
#加入節點列表
elelist.append(attre)
return elelist
@staticmethod
def classtoxml(classobj,roottag=none):
'''''
python自定義模型類轉換成xml,轉換成功返回的是xml根節點,否則返回none
classobj:物件的例項
roottag:根節點名稱
'''try:
classname = classobj.__class__.__name__ #類名
if roottag != none:
root = converter.createroot(roottag)
else:
root = converter.createroot(classname)
elelist = converter.classtoelements(classobj, roottag)
for ele in elelist:
root.append(ele)
return root
except:
print 'classtoxml:轉換出錯,請檢查的傳入的物件是否正確'
return none
@staticmethod
def collectiontoxml(listobj,roottag='list'):
'''''
集合(列表、元組、字典)轉換為xml,轉換成功返回的是xml根節點,否則返回none
'''try:
classname = listobj.__class__.__name__ #類名
root = converter.createroot(roottag)
if isinstance(listobj, list) or isinstance(listobj, tuple):#列表或元組
if len(listobj) >= 0:
for obj in listobj:#迭代列表中的物件
iteme = converter.classtoxml(obj)
root.append(iteme)
elif isinstance(listobj, dict):#字典
if len(listobj) >= 0:
for key in listobj:#迭代字典中的物件
obj = listobj[key]
iteme = converter.classtoxml(obj)
iteme.set('key', key)
root.append(iteme)
else:
print 'listtoxml:轉換錯誤,傳入的物件:'+classname+'不是集合型別'
return root
except:
print 'collectiontoxml:轉換錯誤,集合轉換成xml失敗'
return none
if __name__ == '__main__':
p1 = person('dredfsam','男','133665')
p2 = person('dream','女','r')
p3 = person('得分','男','sdf')
personlist = {}
personlist['p1']= p1
personlist['p2']= p2
personlist['p3']= p3
# personlist.append(p1)
# personlist.append(p2)
# personlist.append(p3)
root = converter.collectiontoxml(personlist)
print converter.getxmlstring(root)
# plist = (p1,p2,p3)#
# print type(plist)
# print type(plist),isinstance(plist, list)
ps:這裡再為大家提供幾款關於xml操作的**工具供大家參考使用:
**xml/json互相轉換工具:
**格式化xml/**壓縮xml:
xml**壓縮/格式化工具:
xml****格式化美化工具:
json轉換為物件
將json字串轉化為物件 param jsondata json串 param beantype 轉換物件 return 轉換好的物件 throws ioexception throws jsonparseexception return t 轉換中可能遇到的情況 轉換時json中的字段沒按照駝峰式...
python實現羅馬數字轉換為整數
輸入 iii 輸出 3 輸入 iv 輸出 4 輸入 ix 輸出 9 輸入 lviii 輸出 58 解釋 l 50,v 5,iii 3.輸入 mcmxciv 輸出 1994 解釋 m 1000,cm 900,xc 90,iv 4.其實實現的思路很簡單,我們就先建立羅馬數字與阿拉伯數字對應的字典,然後再...
將List轉換為Json物件
將list轉換為json物件,分別有兩個json的jar包 1 org.json.jsonarray包 2 net.sf.json.jsonarray包 兩個jsonarray分別實現方式 1 org.json.jsonarray包 2 net.sf.json.jsonarray包 此包下json物...