2010-04-04 10 views
6

Ich benutze Python-Saxophon, um Xml-Datei zu analysieren. Die XML-Datei ist eigentlich eine Kombination mehrerer XML-Dateien. Es sieht aus wie wie folgt:Python-Saxophon-Fehler "Junk nach Dokument-Element"

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

Mein Python-Code ist in den folgenden. Es zeigt einen "Junk-nach-Dokument-Element" -Fehler. Jede gute Idee, um dieses Problem zu lösen. Vielen Dank.

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 Ich hatte genau diesen Fehler, und diese Frage hat mir geholfen. Konnte das fehlende Wurzelelement aus dem Fehler "Junk nach Dokumentelement" nicht richtig herausfinden: D –

Antwort

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

einen Wrapper-Tag um die Daten hinzufügen. Ich habe ElementTree verwendet, da es so einfacher, aber Sie wäre in der Lage das gleiche auf jedem Parser zu tun:

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 

Ergebnisse in

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

Es scheint, dass Sie nicht als root-Element haben in Ihrem XML-Datei. Wickeln Sie Ihre Zeilenelemente in einzelne Zeilen Elemente.