Python Sax ошибка "мусор после элемента документа" - PullRequest
6 голосов
/ 04 апреля 2010

Я использую Python Sax для анализа XML-файла. XML-файл на самом деле представляет собой комбинацию нескольких XML-файлов. Это выглядит следующим образом:

<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:

Ответы [ 2 ]

11 голосов
/ 04 апреля 2010
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 голосов
/ 04 апреля 2010

Кажется, что у вас нет корневого элемента в вашем XML-файле. Оберните элементы строки в один элемент строки.

...