2010-04-04 38 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文件。将你的行元素包装成单行元素。

相关问题