Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 18, 2016 13:45:42

Iris
Зарегистрирован: 2015-12-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

парсинг xml файла, что делаю не так?

всем привет, подскажите, пожалуйста. мне нужно пропарсить xml документ, я открываю докс пайтон орг, смотрю страничку xml.etree.ElementTree и вроде всё просто, есть кусок кода, бери да делай

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()

я ввожу первую строку, вторую и интерпретатор выдает мне ошибку

Traceback (most recent call last):
File “D:\Users\�����\Miniconda3\lib\site-packages\IPython\core\interactiveshell.py”, line 3066, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File “<ipython-input-3-08e39a478024>”, line 1, in <module>
tree = ET.parse('BarterList.xml')
File “D:\Users\�����\Miniconda3\lib\xml\etree\ElementTree.py”, line 1187, in parse
tree.parse(source, parser)
File “D:\Users\�����\Miniconda3\lib\xml\etree\ElementTree.py”, line 598, in parse
self._root = parser._parse_whole(source)
File “<string>”, line None
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1747, column 45

тут у меня ступор

Офлайн

#2 Апрель 18, 2016 14:01:13

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

парсинг xml файла, что делаю не так?

Iris
ParseError: not well-formed (invalid token)
Документ имеет неправильную структуру, невалидный xml. Документ country_data.xml покажте



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Апрель 18, 2016 14:03:52

Iris
Зарегистрирован: 2015-12-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

парсинг xml файла, что делаю не так?

вот этот пытаюсь прочитать.
читаю я его конечно строкой tree = ET.parse('BarterList.xml')

Прикреплённый файлы:
attachment BarterList.xml (237,0 KБ)

Офлайн

#4 Апрель 18, 2016 15:13:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

парсинг xml файла, что делаю не так?

Надо всё поместить в главный (корневой) узел. По спецификации XML в документе может быть только один узел, а в нём все остальные.



Отредактировано py.user.next (Апрель 18, 2016 15:13:54)

Офлайн

#5 Апрель 18, 2016 15:37:33

Iris
Зарегистрирован: 2015-12-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

парсинг xml файла, что делаю не так?

py.user.next
Надо всё поместить в главный (корневой) узел. По спецификации XML в документе может быть только один узел, а в нём все остальные.
Спасибо!
а есть смысл решать задачу через pyparsing? или с ним тоже всё придется к одному узлу приводить?

Офлайн

#6 Апрель 18, 2016 16:14:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

парсинг xml файла, что делаю не так?

Iris
а есть смысл решать задачу через pyparsing?
Нет.
pyparsing используется для построения грамматик и последующего разбора по ним. А здесь анализатор грамматики языка xml уже реализован в модулях xml, lxml.

Iris
или с ним тоже всё придется к одному узлу приводить?
С ним придётся писать с нуля всё то, что уже находится внутри модулей для разбора xml.

Можешь использовать lxml, он легче работает с кусками xml, но для этого модуль надо будет устанавливать, а на винде он не очень хорошо ставится; вплоть до компиляции может дело доходить.



Отредактировано py.user.next (Апрель 18, 2016 16:15:08)

Офлайн

#7 Апрель 19, 2016 06:27:49

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

парсинг xml файла, что делаю не так?

Отсутсвие корневого тега то не проблема, делаем временный файл, пишем туда открывающий фейковый корневой тег, пишем исходый файл, пишем закрывающий корневой тег, парсим временный файл, удаляем временный файл. Но у вас все еще хуже. XML не допускает вложенные комментарии, а этом файле их куча.

➜  ~ xmlstarlet val -e BarterList.xml
BarterList.xml:1747.44: Comment not terminated
<!-- <LostItemType>107</LostItemType><!
<!-- <LostItemType>107</LostItemType><!-- Костюм пачка --> -->
^
BarterList.xml - invalid
Можно разве что попробывать регуляркой повырезать их перед парсингом. Вопрос, похоже риторический, зачем использовать формат, если не знаешь его?! (Это даже не ваш огород камешек, просто в сети полно статей - очень очень быстрый и почти как настоящий парсер xml).



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#8 Апрель 19, 2016 10:33:40

Iris
Зарегистрирован: 2015-12-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

парсинг xml файла, что делаю не так?

Спасибо большое)) начала просто работать с другим файлом, там всё ок)

Офлайн

#9 Июнь 4, 2024 04:51:24

aliacacia
Зарегистрирован: 2024-06-04
Сообщения: 1
Репутация: +  -1  -
Профиль   Отправить e-mail  

парсинг xml файла, что делаю не так?

I appreciate the inclusion of diverse perspectives, as it enriches the article and demonstrates Pokerogue a commitment to presenting a well-rounded view of the topic.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version