• 将一个XML文档转化为python对象树


    #能够将XML文档转换为字典和列表的组合,是一个不错的主意

    from xml.parsers import expat
    class Element(object):
        '''analyze a element'''
        def __init__(self, name, attributes):
            #record tag and attribute dictionary
            self.name = name
            self.attributes = attributes
            #clear the element cdata and its children
            self.cdata = ''
            self.children = [ ]
    
        def addChild(self, element):
            self.children.append(element)
    
        def getAttribute(self, key):
            return self.attributes.get(key)
    
        def getData(self):
            return self.cdata
    
        def getElements(self, name = ''):
            if name:
                return [ c for c in self.children if c.name == name ]
            else:
                return list(self.children)
    
    class Xml2Obj(object):
        '''transform XML to Object'''
        def __init__(self):
            self.root = None
            self.nodeStack = [ ]
        def StartElement(self, name, attributes):
            'Expat start element event handler'
            #make instance of class
            element = Element(name.encode(), attributes)
            #put the element into stack and make it become child_element
            if self.nodeStack:
                parent = self.nodeStack[-1]
                parent.addChild(element)
            else:
                self.root = element
            self.nodeStack.append(element)
    
        def EndElement(self, name):
            'Expat end element event handler'
            self.nodeStack.pop()
    
        def CharacterData(self, data):
            '''Expat character data event handler'''
            if data.strip():
                data = data.encode()
                element = self.nodeStack[-1]
                element.cdata += data
    
        def Parse(self, filename):
            #create Expat analyzer
            Parser = expat.ParserCreate()
            #Set the Expat event handlers to our methods
            Parser.StartElementHandler = self.StartElement
            Parser.EndElementHandler = self.EndElement
            Parser.CharacterDataHandler = self.CharacterData
            #analyz XML file
            ParserStatus = Parser.Parse(open(filename).read(), 1)
            return self.root
    
    parser = Xml2Obj()
    root_element = parser.Parse('sample.xml')
  • 相关阅读:
    把字符串输入到表格里
    x 的 x 次方等于10,求 x
    java 中 二进制串与浮点数的相互转化
    堆栈 Objective-C NSString copy strong
    c一些学习过程中突然错过的细节
    视图控制器
    名词从句
    FastDFS
    Python
    http 提交表单数据
  • 原文地址:https://www.cnblogs.com/hzhida/p/2655923.html
Copyright © 2020-2023  润新知