2010-04-04 16 views
6

Uso python sax per analizzare il file xml. Il file xml è in realtà una combinazione di più file xml. Sembra come segue:errore python sax "junk after document element"

<row name="abc" age="40" body="blalalala..." creationdate="03/10/10" /> 
<row name="bcd" age="50" body="blalalala..." creationdate="03/10/09" /> 

Il mio codice Python è in seguito. Mostra l'errore "junk after document element". Qualche buona idea per risolvere questo problema. Grazie.

from xml.sax.handler import ContentHandler 
from xml.sax import make_parser,SAXException 
import sys 

class PostHandler (ContentHandler): 
    def __init__(self): 
     self.find = 0 
     self.buffer = '' 
     self.mapping={} 
    def startElement(self,name,attrs): 
     if name == 'row': 
      self.find = 1 
      self.body = attrs["body"] 
      print attrs["body"] 
    def character(self,data): 
     if self.find==1: 
      self.buffer+=data 
    def endElement(self,name): 
     if self.find == 1: 
      self.mapping[self.body] = self.buffer 
      print self.mapping 
parser = make_parser() 
handler = PostHandler() 
parser.setContentHandler(handler) 
try: 
    parser.parse(open("2.xml")) 
except SAXException: 
+0

+1 Ho avuto questo errore esatto e questa domanda mi ha aiutato. Non riuscivo a capire l'elemento radice mancante dall'errore "junk after document element": D –

risposta

11
xmldata = ''' 
<row name="abc" age="40" body="blalalala..." creationdate="03/10/10" /> 
<row name="bcd" age="50" body="blalalala..." creationdate="03/10/09" /> 
''' 

Add a tag wrapper per i dati. Ho usato ElementTree dal momento che è così semplice, ma si sarebbe in grado di fare lo stesso in qualsiasi parser:

from xml.etree import ElementTree as etree 

# wrap the data 
xmldata = '<rows>' +data + '</rows>' 

rows = etree.fromstring(xmldata) 
for row in rows: 
    print row.attrib 

Risultati in

{'age': '40', 
'body': 'blalalala...', 
'creationdate': '03/10/10', 
'name': 'abc'} 
{'age': '50', 
'body': 'blalalala...', 
'creationdate': '03/10/09', 
'name': 'bcd'} 
4

Sembra che non si dispone di elemento principale nella vostra File XML Avvolgi i tuoi elementi riga in elementi a righe singole.

Problemi correlati