python中字符串轉xml對象_Python實現對象轉換為xml的方法示例

本文實例講述了Python實現對象轉換為xml的方法。分享給大家供大家參考,具體如下:

# -*- 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)#{'name':'sdf'}

# print type(plist)

# print type(plist),isinstance(plist, list)

PS:這里再為大家提供幾款關于xml操作的在線工具供大家參考使用:

希望本文所述對大家Python程序設計有所幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396196.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396196.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396196.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python現在時間 命令,Python 日期格式和時間以及當前時間和時間戳

Python 程序在運行的時候可能需要獲得當前的時間。在這個時候我們需要導入 datetime 包。獲得當前時間例如,可以使用下面的代碼獲得當前的日期。today datetime.date.today()print("Todays date:", today)在上面的代碼中,將會輸出&#xff1a…

谷歌入職郵件_為什么我全職學習了8個月以接受Google采訪

谷歌入職郵件by Googley as Heck由Googley飾演Heck 為什么我全職學習了8個月以接受Google采訪 (Why I studied full-time for 8 months for a Google interview) It’s true. I’ve spent thousands of hours reading books, writing code, and watching computer science lec…

關于meta便簽詳解

<!-- 聲明文檔 --> <meta charsetutf-8> <meta http-equiv"X-UA-Compatible" content"IEedge" /> //指示IE以目前可用的最高模式顯示內容 <!-- SEO 優化 --> <meta name"description" content"不超過150個字符&…

go grpc 深入筆記

為什么80%的碼農都做不了架構師&#xff1f;>>> grpc 深入 生命周期 grpc 的生命周期由4種請求的方式不同而不同&#xff1a;(詳細查看router示例) 普通rpc: 客戶端發送請求&#xff0c;通知服務端調用rpc服務&#xff0c;服務端返回請求&#xff0c;如果狀態"…

messagedigest 圖片加密_MessageDigest 加密和解密2

-------------------解密---------------------------package com.drawthink.platform.util;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java…

34個省市自治區排序_freeCodeCamp的1,000多個學習小組現已完全自治

34個省市自治區排序by Justin Sane賈斯汀桑恩(Justin Sane) freeCodeCamp的1,000多個學習小組現已完全自治 (freeCodeCamp’s 1,000 study groups are now fully autonomous) When the first local freeCodeCamp (fCC) study group popped up, we had no idea that within les…

oracle rac alter日志,ORACLE 11G RAC 增加日志組及增大日志文件

1、查看目前日志組和日志文件情況SQL> select * from v$logfile order by 1;GROUP# STATUS TYPE MEMBER IS_---------- ------- ------- -------------------------------------------------- ---1 ONLINE FRA/st…

RSA加密算法簡單分析

預備知識 1&#xff09;RSA是第一個比較完善的公開密鑰算法&#xff0c;它既能用于加密&#xff0c;也能用于數字簽名。RSA以它的三個發明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名&#xff0c;這個算法經受住了多年深入的密碼分析&#xff0c;雖然密碼分析者…

C#字符串變量使用

string由于是引用類型&#xff0c;所以&#xff0c;聲明的字符串變量會存儲到堆上&#xff0c;而且該變量是不可變的&#xff0c;一旦初始化了該變量&#xff0c;該內存區域中存儲的內容將不能更改。在對字符串操作時&#xff0c;是在堆上創建了一個新的字符串變量&#xff0c;…

c語輸入單引號_C語言的printf不能用單引號?

多年沒用C語言了。近日用R語言編程時因有太多循環&#xff0c;只好用C寫個擴展模塊&#xff0c;一時竟不知怎么動手了。在多種語言中&#xff0c;單引號和雙引號是可以等同使用的。因鍵入雙引號要比單引號多按一SHIFT鍵&#xff0c;我偏好單引號。在用printf顯示字符串&#xf…

css flexbox模型_CSS Flexbox在全國范圍內的公路旅行中得到了解釋

css flexbox模型by Kevin Kononenko凱文科諾年科(Kevin Kononenko) CSS Flexbox在全國范圍內的公路旅行中得到了解釋 (CSS Flexbox Explained by Road Tripping Across the Country) 如果您旅行很長&#xff0c;那么您可以了解CSS Flexbox&#xff01; (If you have ever been…

oracle 10g 白皮書,Oracle 10g標準版與企業版

beautiful 于 2007-03-06 00:43:37發表:最后還有一些關于oracle產品的FAQ&#xff1a;1. Oracle數據庫軟件目前在售的版本號&#xff1f;A&#xff1a;目前在售的是Oracle 9i 和Oracle 10g2. 10g是不是比9i更好&#xff1f;A&#xff1a;一個新版本的軟件推出以后&#xff0c;總…

Linux 小筆記

1、查看linux 版本 按ctrlshiftt 快捷鍵&#xff0c;打開終端&#xff0c;輸入sudo uname --m &#xff0c;按下enter 如果顯示i686,你安裝了32位操作系統 如果顯示 x86_64&#xff0c;你安裝了64位操作系統 轉載于:https://www.cnblogs.com/1995hxt/p/5436683.html

不會發布npm包?進來看看?

前言 npm(Node Package Manager)&#xff0c;一個Node的包管理器&#xff0c;平時我們常用的公共模塊&#xff08;插件&#xff09;或者叫做包大多都放在上面&#xff0c;所以接下來要封裝的插件&#xff0c;我們就簡單稱它為npm包&#xff0c;本文從就從這個簡單的例子開始&am…

如何讓帝國CMS7.2搜索模板支持動態標簽調用

帝國cms站內搜索一般不支持動態標簽調用&#xff0c;如果要調用如何實現呢&#xff1f;修改兩個地方就可以實現了。打開 /e/search/result/index.php 文件&#xff0c;找到&#xff08;文件改了&#xff0c;不會調用也是徒勞&#xff01;看看這個帝國cms搜索關鍵字調用標簽(sho…

access字體變為斜體_Linux折騰記(四):Linux桌面系統字體配置詳解

字體顯示效果測試文字&#xff1a;復制代碼代碼如下:這一段是為了測試宋體字的顯示效果&#xff0c;包括宋體里面自帶的英文字體&#xff0c;“This is english,how does it look like?”。這一行是小字。后面幾個字是加粗的宋體。標點符號“&#xff0c;。&#xff1a;&#…

oracle between and monday,oracle——時間

時間數據1. 插入時間數據插入語法命令&#xff1a;insert into floor values (to_date(年-月-日 時:分:秒,YYYY-MM-DD HH24:MI:SS));完整的時間插入insert into floor values (to_date(2010-07-12 09:10:12,YYYY-MM-DD HH24:MI:SS));查詢顯示&#xff1a;2010-07-12 09:10:12.0…

Nova 組件詳解 - 每天5分鐘玩轉 OpenStack(26)

本節開始&#xff0c;我們將詳細講解 Nova 的各個子服務。 前面架構概覽一節知道 Nova 有若干 nova-* 的子服務&#xff0c;下面我們將依次學習最重要的幾個。今天先討論 nova-api 和 nova-conductor。 nova-api Nova-api 是整個 Nova 組件的門戶&#xff0c;所有對 Nova 的請…

肯德基圣代中間空心_建造冰淇淋圣代解釋CSS位置

肯德基圣代中間空心by Kevin Kononenko凱文科諾年科(Kevin Kononenko) 建造冰淇淋圣代解釋CSS位置 (CSS Positioning Explained By Building An Ice Cream Sundae) 如果您之前做過冰淇淋圣代&#xff0c;那么您可以了解CSS的位置。 (If you’ve made an ice cream sundae befo…

00

&#xff08;1&#xff09;設置gcc 把所有gcc版本解壓到/home/flinn/tools/目錄下&#xff0c;以免切換編譯器export PATHPATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flinn/tools/4.4.3/bin &#xff08;2&#xff09;編譯&#xff1…