gadzhi15
@gadzhi15

Распарсивание XML с помощью Python. Как решить проблему в LXML?

Имеется данный код:

file_events = "1.xml"
f = open(file_events)
xml = f.read()
f.close()
tree = etree.parse(StringIO(xml))


В переменной file_events содержится имя файла который надо парсить. Он находится в папке со скриптом. При компиляции показывает ошибку.

tree = etree.parse(StringIO(xml))
  File "lxml.etree.pyx", line 3427, in lxml.etree.parse (src\lxml\lxml.etree.c:79720)
  File "parser.pxi", line 1799, in lxml.etree._parseDocument (src\lxml\lxml.etree.c:116138)
  File "parser.pxi", line 1819, in lxml.etree._parseMemoryDocument (src\lxml\lxml.etree.c:116413)
  File "parser.pxi", line 1707, in lxml.etree._parseDoc (src\lxml\lxml.etree.c:115063)
  File "parser.pxi", line 1079, in lxml.etree._BaseParser._parseDoc (src\lxml\lxml.etree.c:109462)
  File "parser.pxi", line 573, in lxml.etree._ParserContext._handleParseResultDoc (src\lxml\lxml.etree.c:103323)
  File "parser.pxi", line 683, in lxml.etree._handleParseResult (src\lxml\lxml.etree.c:104977)
  File "parser.pxi", line 613, in lxml.etree._raiseParseError (src\lxml\lxml.etree.c:103886)
lxml.etree.XMLSyntaxError: Premature end of data in tag event line 784, line 786, column 7


Но если указать так:
tree = etree.parse('1.xml')

То все работает.

В чем проблема?
  • Вопрос задан
  • 1211 просмотров
Пригласить эксперта
Ответы на вопрос 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Попробуйте так:
....
your_data = StringIO.StringIO()
your_data.write(xml)
your_data.seek(0)
tree = etree.parse(your_data)


У вас указатель на конце файла стоит, когда вы делаете запись в StringIO

З.Ы.
А вообще файл лучше так открывать:
f = open(file_events, 'r')
Либо вообще избавиться от лишнего звена
tree = etree.parse(file_events)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы