![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| check |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Имеется XML-документ примерно такой структуры.
По этой схеме видно, что теги с одинаковыми именами могут описывать разные данные в зависимости от того, где они расположены в дереве документа. Например тег <фамилия> может содержать фамилию получателя, а может фамилию законного представителя. Я написал программу, использующую SAX API, которая разбирает такой XML по именам тегов, не делая различия между, допустим, тегом <фамилия> вложенным в тег <поручение> и таким же тегом имеющем другой уровень вложенности. Нужно сделать то же самое, но учитывая такие моменты. Вот пример выбора нескольких тегов
Отсюда такой вопрос: следует ли мне выбрать для обработки DOM вместо SAX, или можно обойтись средствами SAX. Если SAX, то как с его помощью построить дерево документа? Имеет значение также производительность - это плюс в пользу SAX. Ну и простота реализации, тут не могу пока сравнивать. Добавлено @ 14:58 Ещё одно - XML довольно большой. Это сообщение отредактировал(а) check - 1.2.2007, 14:49 |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Лично я бы использовал JAXB.
Даешь ему XML схему документа, он генерирет тебе классы, а потом тремя строчками получаешь из XML документа объекты Java, и наоборот. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Какая версия JAXB использует DTD-схемы? Я скачал jaxb-ri-20061211, там xsd, мне придется на ходу их изучать. А с DTD я уже имел дело.
|
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Почитай вот тут.
|
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Спасибо. Вообще я поковырял DOM, потом перечитал свой первый пост, и не понял в чем была причина паники.
Все, что нужно, извлекается из XML довольно легко. Я когда-то соприкасался с DOM, правда в JavaScript, были какие-то проблемы. С тех пор сложилось представление что DOM это сложно. JAXB пока буду рассматривать как альтернативный выриант. Это сообщение отредактировал(а) check - 3.2.2007, 16:00 |
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Возвращаясь к теме выбора оптимальной технологии...
(к сожалению приходится Написанная мной с использованием DOM программа чудненько функционирует, пока размеры XML-файла не превышают определённых пределов. Однако реально ей пришлось иметь дело с файлом размером 35 метров. При таком размере файла, после недолгого раздумья выкидывается небезывестное java.lang.OutOfMemoryError: Java heap space. Ладно, можно конечно увеличить максимальный объем используемой JVM памяти. Но это не решает проблему. Сегодня этот файл который я уменьшил где метров до 8, грузился в txt-шку около суток! Дело тут конечно не только в метрах, но и в количестве вложенных тегов и глубине их вложенности. Я бы на месте авторов документа все таки придумал уникальное имя для каждого тега, тогда не пришлось бы накручивать по десять циклов вложенных друг в друга. В общем, я решил переделать все на XSLT. В качестве XSLT-процессора выбрал Saxon. Вот собственно и хотел узнать - можно ли расчитывать на то, что этот вариант поможет решить проблему с производительностью? По-поводу JAXB, наверное на самом деле это просто, но я что-то не понял как им пользоваться. |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
По-моему все решается легко в рамках SAX. Здесь ведь простая программная логика. Если встретилось начало тэга 'фио_законного_представителя', устанавливаем нужный признак, когда встретился конец тэга, сбрасываем признак. По признаку можно определить к чему относится тэг 'фамилия'.
|
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
А ведь и правда. Так всё в несколько раз упрощается, и никаких вложенных циклов. А то сейчас моя программа напоминает эдакий турбулентный поток |
|||
|
||||
| Tony |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: нет Всего: 12 |
commons digester.
|
||||||
|
|||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Digester вещь хорошая, но!
1. Медленная т.к. работает через рефлекцию. 2. Памяти будет требовать на уровне JAXB, т.к. тоже все сразу закачивает в память. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: нет Всего: 12 |
Мне он нравится link pro digester Это сообщение отредактировал(а) Tony - 16.2.2007, 17:02 |
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Всё-таки XSLT
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |