He estado haciendo lo siguiente:
Código Python:
Ver original
class XML2Py(): def __init__( self ): self._parser = parser = etree.XMLParser( remove_blank_text=True ) self._root = 'DHA' # root de la estructura etree self.data = 'Nivel' # Estructura donde precesamos los datos Python def parse( self, xmlString ): ''' procesa string xml dentro de una estructura de datos Python ''' self._root = etree.fromstring( xmlString, self._parser ) self.data = self._parseXMLRoot() return self.data def tostring( self ): ''' crea una representación de string usando el objeto etree ''' if self._root != None: return etree.tostring( self._root ) def _parseXMLRoot( self ): ''' comienza a procesar, tener cuidado en el primer nivel de serializacion ''' childDict = self._parseXMLNode( self._root ) return { self._root.tag : childDict["children"] } def _parseXMLNode( self, element ): ''' resto del procesamiento ''' childContainer = None # either Dict or List # process any tag attributes # if we have attributes then the child container is a Dict # otherwise a List if element.items(): childContainer = {} childContainer.update( dict( element.items() ) ) else: childContainer = [] if isinstance( childContainer, list ) and element.text: # tag with no attributes and one that contains text childContainer.append( element.text ) else: # tag might have children, let's process them for child_elem in element.getchildren(): childDict = self._parseXMLNode( child_elem ) # let's store our child based on container type # if isinstance( childContainer, dict ): # these children are lone tag entities ( eg, 'copyright' ) childContainer.update( { childDict["tag"] : childDict["children"] } ) else: # these children are repeated tag entities ( eg, 'format' ) childContainer.append( childDict["children"] ) return { "tag":element.tag, "children": childContainer } def main(): archivoxml = minidom.parse('tentativoXML.xml') # Uso la función par de minidom para cargar en una variable el contenido del archivo xml xml_string = archivoxml.toxml() # Paso los datos del archivo para sean procesados como string deserializer = XML2Py() python_object = deserializer.parse( xml_string ) print xml_string print python_object if __name__ == '__main__': main()
Pero me genera problemas, ya que me quedan elementos a los cuales no les deja el nombre del tag, sino que les pone un numero.
Espero puedan ayudar. Saludos