Найти - Пользователи
Полная версия: Ошибка чтения XML
Начало » Python для новичков » Ошибка чтения XML
1
R.Ll.S.h57
Дан 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”. Судя по всему проблема в символе “&”. Подскажите, пожалуйста, как это обойти.
PooH
R.Ll.S.h57
Но при обработке про помощи xml.parsers.expat генерируется исключение “ExpatError: not well-formed (invalid token): line 4 column 13”. Судя по всему проблема в символе “&”. Подскажите, пожалуйста, как это обойти.
Ну дык в том и дело что это неправильный XML документ. Пройдитесь по нему предварительно, ну хотя регулярками и исправьте. А лучше исправьте ошибку в программе, которая его формирует.
R.Ll.S.h57
Нет, прогу исправить невозможно. Вот если б заставить обработчика воспринимать символы “&” в значениях атрибутов как обыкновенный символ, а не как ссылки на сущность.
PooH
R.Ll.S.h57
Нет, прогу исправить невозможно. Вот если б заставить обработчика воспринимать символы “&” в значениях атрибутов как обыкновенный символ, а не как ссылки на сущность.
Угу, это из серии - вот заливать бы в бак ослиную мочу. Пройдитесь предварительно регулярками и замените & на &amp;
R.Ll.S.h57
Ясно. А есть ли еще символы (кроме “&” и “<”), которые могут вызвать подобную ошибку?
igor.kaist
R.Ll.S.h57
Ясно. А есть ли еще символы (кроме “&” и “<”), которые могут вызвать подобную ошибку?
вот они http://www.hdfgroup.org/HDF5/XML/xml_escape_chars.htm
R.Ll.S.h57
: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 устарел… Но все равно всем спасибо :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB