2010-02-14 15 views
7

Lo que necesito es solo obtener el texto de la etiqueta correspondiente y persistir en la base de datos. Como el archivo xml es grande (4.5GB) estoy usando sax. Usé el caracteres del método para obtener el texto y ponerlo en un diccionario. Sin embargo, cuando estoy imprimiendo el texto en el método endElement obtengo una nueva línea en lugar del texto.¿Cómo puedo obtener el texto entre las etiquetas usando el analizador de Python SAX?

Aquí está mi código:

def characters(self,content): 
    text = unescape(content)) 
    self.map[self.tag]=text 

def startElement(self, name, attrs): 
    self.tag = name 

def endElement (self, name) 
    if (name=="sometag") 
    print self.map[name] 

Gracias de antemano.

Respuesta

6

El texto en la etiqueta está fragmentado por el procesador SAX. characters se puede llamar varias veces.

que tiene que hacer algo como:

def startElement(self, name, attrs): 
    self.map[name] = '' 
    self.tag = name 

def characters(self, content): 
    self.map[self.tag] += content 

def endElement(self, name): 
    print self.map[name] 
+0

Gracias! El siguiente código es un accidente o debería ser así? self.map [name] == '' – ablimit

+0

¿Dónde puedo encontrar una referencia a este comportamiento? El texto de la etiqueta está recortado por el procesador SAX. los personajes pueden ser llamados varias veces. – ablimit

+0

Lo sentimos, un error tipográfico. He editado la respuesta. self.map [name] = '' – codeape

Cuestiones relacionadas