О чтении и понимании
Mar. 31st, 2009 12:27 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Нужно обмениваться данными с другой программой. Сделал для ее разработчиков документ с описанием формата на базе CSV, в котором есть такие строки:
"дата - формат dd.mm.yyyy, с выводом незначащих нулей."
"в первых трех строках последнее поле не указано, поэтому в конце строки стоит ;" (Всего полей шесть, последнее может быть пустым и чтобы парсеру не обрабатывать частные случаи - пустое последнее поле должно быть).
Присылают файл с такими строками:
"10780;11077112;31.03.2009;1.04.2009;1014"
Вопрос, что я объяснил не так?
"дата - формат dd.mm.yyyy, с выводом незначащих нулей."
"в первых трех строках последнее поле не указано, поэтому в конце строки стоит ;" (Всего полей шесть, последнее может быть пустым и чтобы парсеру не обрабатывать частные случаи - пустое последнее поле должно быть).
Присылают файл с такими строками:
"10780;11077112;31.03.2009;1.04.2009;1014"
Вопрос, что я объяснил не так?
no subject
Date: 2009-03-31 02:15 pm (UTC)В SAX сделаю три переменных и в вызове обработчика для элемента буду заполнять их, проверяя имя элемента.
И уж всяко не стану надеятся на порядок их расположения в файле - мало ли что там может быть, например комментарий кто-нибудь всунет или еще хрень какую.
no subject
Date: 2009-03-31 02:21 pm (UTC)no subject
Date: 2009-03-31 02:41 pm (UTC)Но на выходе парсера обычно или дерево DOM или последовательность дерганий событий в случае SAX. Чем им поможет заданная последовательность элементов - не представляю, для меня это выглядит как аналог обращения к полям в БД по индексу Field[0], Field[2] и отгребания потом по полной программе, когда в запросе поля не в том порядке.
no subject
Date: 2009-03-31 03:05 pm (UTC)Кроме того "орднунг".
no subject
Date: 2009-03-31 03:12 pm (UTC)no subject
Date: 2009-03-31 03:22 pm (UTC)no subject
Date: 2009-03-31 03:26 pm (UTC)Конечно, переносить реляционную модель прямо на XML нельзя, но конкретно этот принцип "неупорядоченности" и явного указания некоего поля для сортировки уже неоднократно меня спасал от всяческого геморроя.
no subject
Date: 2009-03-31 06:08 pm (UTC)no subject
Date: 2009-04-01 09:29 am (UTC)no subject
Date: 2009-04-01 10:39 am (UTC)no subject
Date: 2009-04-01 10:48 am (UTC)no subject
Date: 2009-04-01 10:56 am (UTC)no subject
Date: 2009-04-01 11:02 am (UTC)no subject
Date: 2009-04-01 11:03 am (UTC)no subject
Date: 2009-04-01 11:16 am (UTC)no subject
Date: 2009-04-01 11:22 am (UTC)no subject
Date: 2009-04-01 10:53 am (UTC)no subject
Date: 2009-04-02 09:10 pm (UTC)Для решения этой проблемы и придуман DTD / XSD. Последний -- достаточно сатанинский "а-ля функциональный" язык. Например, не всякий XSD можно перевести в DTD. У XSD есть диалекты и т.д. Валидация это серьёзная тема, если Вы не понимаете её -- то скорее это Вы неправы, чем сотни опытных людей из всяких комитетов.
Для обработки регулярных структур тупой поиск по имени не подходит. Скажем, у элемента config-array будут идти последовательности из трёх строчек a1/b0/z0, не объединённые в свой элемент, их надо класть в массив. Тогда обработчик SAX должен третий элемент z0 считать разделителем объектов.
Примерно такой подход в Яве реализован в commons-digester. Мощнейшая штука. Даёте XML описание, получаете программу парсания XML в любой ВАШ объект.