2010-04-04 61 views
6

我使用python sax解析xml文件。 xml文件實際上是多個xml文件的組合。 它看起來像如下:python sax錯誤「文檔元素後的垃圾」

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

我的Python代碼在下面。它顯示「文件元素後的垃圾」錯誤。任何好主意來解決這個問題。謝謝。

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我有這個確切的錯誤,這個問題幫助了我。無法完全弄清楚「文檔元素之後的垃圾」錯誤中缺失的根元素:D – 2013-06-22 17:04:01

回答

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

添加的包裝標籤周圍的數據。我用ElementTree的,因爲它是如此簡單,但你可以做同樣的任何解析器:

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 

結果

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

看來你沒有根元素在你的XML文件。將你的行元素包裝成單行元素。

相關問題