Уведомления

Группа в Telegram: @pythonsu

#1 Май 10, 2010 17:16:34

R.Ll.S.h57
От:
Зарегистрирован: 2010-02-25
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка чтения XML

Дан XML документ:

<?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd">
<folder-listing version="1.0">
<file name="&;005.jpg" size="0" modified="20100331T190858Z" created="20100331T190858Z" accessed="20100331T190858Z" />
<folder name="1" modified="20100225T151907Z" created="20100208T154642Z" />
<file name="aaa.py" size="20" modified="20100329T151045Z" created="20100329T151026Z" accessed="20100331T183540Z" />
<file name="aaa_v1_0_0.sis" size="8724" modified="20100329T153517Z" created="20100329T153319Z" accessed="20100331T124604Z" />
<folder name="Documents" modified="20100329T075537Z" created="20091205T115346Z" />
<folder name="Downloads" modified="20100115T112519Z" created="20090805T073107Z" />
<folder name="Films" modified="20100325T143345Z" created="20090821T103746Z" />
<folder name="For mobiles" modified="20091104T182314Z" created="20090726T060054Z" />
<folder name="Games" modified="20100331T181615Z" created="20090719T154651Z" />
<folder name="Install" modified="20100331T130102Z" created="20090902T160816Z" />
<folder name="MSOCache" modified="20090719T182541Z" created="20090719T182541Z" />
<folder name="Music" modified="20090726T075948Z" created="20090726T075401Z" />
<folder name="Program files" modified="20100331T132529Z" created="20090719T161525Z" />
<folder name="RECYCLER" modified="20090731T094537Z" created="20090719T154626Z" />
<folder name="System Volume Information" modified="20090720T172834Z" created="20090719T154506Z" />
<file name="tco.i" size="0" modified="20100331T190917Z" created="20100331T190917Z" accessed="20100331T190917Z" />
</folder-listing>
Нужно сделать из него список словарей. Но при обработке про помощи xml.parsers.expat генерируется исключение “ExpatError: not well-formed (invalid token): line 4 column 13”. Судя по всему проблема в символе “&”. Подскажите, пожалуйста, как это обойти.



Офлайн

#2 Май 11, 2010 08:23:43

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

Ошибка чтения XML

R.Ll.S.h57
Но при обработке про помощи xml.parsers.expat генерируется исключение “ExpatError: not well-formed (invalid token): line 4 column 13”. Судя по всему проблема в символе “&”. Подскажите, пожалуйста, как это обойти.
Ну дык в том и дело что это неправильный XML документ. Пройдитесь по нему предварительно, ну хотя регулярками и исправьте. А лучше исправьте ошибку в программе, которая его формирует.



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

Офлайн

#3 Май 11, 2010 15:38:46

R.Ll.S.h57
От:
Зарегистрирован: 2010-02-25
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка чтения XML

Нет, прогу исправить невозможно. Вот если б заставить обработчика воспринимать символы “&” в значениях атрибутов как обыкновенный символ, а не как ссылки на сущность.



Офлайн

#4 Май 11, 2010 16:15:51

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

Ошибка чтения XML

R.Ll.S.h57
Нет, прогу исправить невозможно. Вот если б заставить обработчика воспринимать символы “&” в значениях атрибутов как обыкновенный символ, а не как ссылки на сущность.
Угу, это из серии - вот заливать бы в бак ослиную мочу. Пройдитесь предварительно регулярками и замените & на &amp;



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

Офлайн

#5 Май 11, 2010 17:04:38

R.Ll.S.h57
От:
Зарегистрирован: 2010-02-25
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка чтения XML

Ясно. А есть ли еще символы (кроме “&” и “<”), которые могут вызвать подобную ошибку?



Офлайн

#6 Май 11, 2010 17:17:33

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Ошибка чтения XML

R.Ll.S.h57
Ясно. А есть ли еще символы (кроме “&” и “<”), которые могут вызвать подобную ошибку?
вот они http://www.hdfgroup.org/HDF5/XML/xml_escape_chars.htm



Офлайн

#7 Май 11, 2010 21:43:25

R.Ll.S.h57
От:
Зарегистрирован: 2010-02-25
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка чтения XML

:D Нет необходимости менять документ. Кажется, я нашел то, что надо (как это я раньше не мог? :/):

import xmllib

xml_parser = xmllib.XMLParser(translate_attributes_references = False) # В этом случае обработчик не будет менять ссылки на сущности, а оставит как есть

def start_tag(tag, attr):
print tag, attr

xml_parser.unknown_starttag = start_tag
xml_parser.feed(data)
Только, говорят, модуль xmllib устарел… Но все равно всем спасибо :)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version