2010-02-14 13 views
7

Quello che mi serve è solo ottenere il testo del tag corrispondente e persistere nel database. Dal momento che il file xml è grande (4,5 GB) sto usando il sax. Ho usato il metodo caratteri per ottenere il testo e inserirlo in un dizionario. Tuttavia, quando sto stampando il testo nel metodo endElement, ricevo una nuova riga anziché il testo.Come posso ottenere il testo tra i tag usando il parser SAX python?

Ecco il mio codice:

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] 

Grazie in anticipo.

risposta

6

Il testo nel tag è troncato dal processore SAX. characters potrebbe essere chiamato più volte.

Hai bisogno di fare qualcosa di simile:

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

Grazie! Il seguente codice è un incidente o dovrebbe essere così? self.map [name] == '' – ablimit

+0

Dove posso trovare un riferimento a questo comportamento? Il testo nel tag viene troncato dal processore SAX. i personaggi potrebbero essere chiamati più volte. – ablimit

+0

Siamo spiacenti, un errore di battitura. Ho modificato la risposta. self.map [nome] = '' – codeape

Problemi correlati