import
xml.etree.ElementTree as ET
import
xml.dom.minidom as minidom
from
addrbook.domain
import
Person
class
Converter(
object
):
root
=
None
def
__init__(
self
):
pass
@staticmethod
def
createRoot(rootTag):
root
=
ET.Element(rootTag)
return
root
@staticmethod
def
getXmlString(element,defaultEncoding
=
'utf-8'
):
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
):
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
):
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'
):
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
root
=
Converter.collectionToXML(personList)
print
Converter.getXmlString(root)