백엔드 개발 파이썬 튜토리얼 Python에서 설명하는 XML 메소드에 대한 객체의 자세한 설명

Python에서 설명하는 XML 메소드에 대한 객체의 자세한 설명

Aug 09, 2017 am 10:58 AM
python 방법 상해

이 글에서는 주로 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)
로그인 후 복사

위 내용은 Python에서 설명하는 XML 메소드에 대한 객체의 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

휴대폰에서 글꼴 크기를 설정하는 방법(휴대폰에서 글꼴 크기를 쉽게 조정) 휴대폰에서 글꼴 크기를 설정하는 방법(휴대폰에서 글꼴 크기를 쉽게 조정) May 07, 2024 pm 03:34 PM

휴대폰에서 글꼴 크기를 설정하는 방법(휴대폰에서 글꼴 크기를 쉽게 조정)

DeepSeek Xiaomi를 다운로드하는 방법 DeepSeek Xiaomi를 다운로드하는 방법 Feb 19, 2025 pm 05:27 PM

DeepSeek Xiaomi를 다운로드하는 방법

템플릿의 장점과 단점은 무엇입니까? 템플릿의 장점과 단점은 무엇입니까? May 08, 2024 pm 03:51 PM

템플릿의 장점과 단점은 무엇입니까?

Google AI, 개발자를 위한 Gemini 1.5 Pro 및 Gemma 2 발표 Google AI, 개발자를 위한 Gemini 1.5 Pro 및 Gemma 2 발표 Jul 01, 2024 am 07:22 AM

Google AI, 개발자를 위한 Gemini 1.5 Pro 및 Gemma 2 발표

휴대폰 화면 보호를 위한 휴대폰 화면 보호 필름 선택 방법(휴대폰 화면 보호 필름 구매 시 핵심 포인트 및 팁) 휴대폰 화면 보호를 위한 휴대폰 화면 보호 필름 선택 방법(휴대폰 화면 보호 필름 구매 시 핵심 포인트 및 팁) May 07, 2024 pm 05:55 PM

휴대폰 화면 보호를 위한 휴대폰 화면 보호 필름 선택 방법(휴대폰 화면 보호 필름 구매 시 핵심 포인트 및 팁)

당신은 그에게 Deepseek에게 어떻게 물어 봐요 당신은 그에게 Deepseek에게 어떻게 물어 봐요 Feb 19, 2025 pm 04:42 PM

당신은 그에게 Deepseek에게 어떻게 물어 봐요

평가 기능을 저장하는 방법 평가 기능을 저장하는 방법 May 07, 2024 am 01:09 AM

평가 기능을 저장하는 방법

NET40은 어떤 소프트웨어인가요? NET40은 어떤 소프트웨어인가요? May 10, 2024 am 01:12 AM

NET40은 어떤 소프트웨어인가요?

See all articles