Уведомления

Группа в Telegram: @pythonsu

#1 Март 15, 2012 11:40:38

michails
От:
Зарегистрирован: 2011-12-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

SAX:Парсинг с конца файла

Задача следующая: есть большой(сотни мб.) xml-файл (если конкретнее формат .osm ). Требуется отфильтровать и результат записать в файл. Проблема заключается в том, что результат фильтрации последующих элементов зависит от предыдущих(см. Подробности). Простым решением могло быть чтение с конца, однако нигде не описанА такая манипуляция с открытием файла или c sax-парсером (предварительное создание копии файла не в счет)

Подробности.
Основными элементами в формате .osm явлются node,way,relation. При этом way содержит ссылки на node, a relation - ссылки на node и way:

<osm>
<node id='1'/>
<node id='2'/>
<way id='1'>
<!--Ссылки на элементы -->
<nd ref='1'/>
<nd ref='2'/>
</way>
<relation id='1'>
<!--Ссылки на элементы -->
<member type='node' ref='1'/>
<member type='way' ref='1'/>
</relation>
</osm>
Требуется отфильтровать:
1.Элементы,удовлетворяющие условию фильтрации
2.элементы, на которые ссылаются элементы пункта 1



Офлайн

#2 Март 16, 2012 08:08:35

michails
От:
Зарегистрирован: 2011-12-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

SAX:Парсинг с конца файла

К сожалению трюк с чтением с конца не прошёл. Стандартный xml.sax.ContentHandler выдаёт ошибку, встречая закрытый тег перед отрытым. Честно говоря совсем не понятно подобное поведение - это особенность конкретной реализации или подобное ограничение чем-то обусловлено?



Офлайн

#3 Март 17, 2012 02:28:01

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

SAX:Парсинг с конца файла

С конца парсить нельзя. SAX работает только с прямым потоком — по построению.



Офлайн

#4 Март 19, 2012 12:08:10

michails
От:
Зарегистрирован: 2011-12-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

SAX:Парсинг с конца файла

Проблему в итоге решил радикально - написал парсер под этот формат. Странно, что для подобной задачи не имеется готового решения.



Офлайн

#5 Март 20, 2012 05:22:31

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

SAX:Парсинг с конца файла

michails
Проблему в итоге решил радикально - написал парсер под этот формат. Странно, что для подобной задачи не имеется готового решения.
Я посмотрел описание и схему формата osm и не нашел чтобы там гарантировался порядок появления node, way и relation.



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

Офлайн

#6 Март 20, 2012 10:10:34

michails
От:
Зарегистрирован: 2011-12-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

SAX:Парсинг с конца файла

Вообще я также этого не видел, но все генераторы, в том числе c официальных серверов openstreetmap, выдают именно такую последовательность. Также возможно (не берусь утверждать точно), такая последовательность необходима, чтобы корректно импортировать эти данные в postgre(это распространённая задача).
Поэтому мне кажется, что это стандарт де-факто.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version