|
Модераторы: LSD, AntonSaburov |
|
Fame_biz |
|
||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 1.2.2007 Репутация: нет Всего: нет |
Есть такая ситуация :
Есть 1 сервлет который на вход получает пост запрос, в котором находиться XML
но данный XML может меняться от разных версий корневого атрибута version="1.0". Все изменения происходят только внутри REQUEST_DATA Также существуют на каждый запрос XSD схемы. И тут возникает вопрос каким образом можно реализовать разбор XML документа в зависимости от version пришедшего XML и FEATURE. ет вопрос каким образом можно реализовать разбор XML документа взависимости от version пришедшого XML и FEATURE. Это сообщение отредактировал(а) Fame_biz - 30.4.2008, 16:42 |
||||
|
|||||
mbasil |
|
|||
Опытный Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 2 Всего: 13 |
Разбирать с помощью SAX до уровня REQUEST_DATA. Для всех вариантов схем с помощью утилиты xjc породить наборы классов. Выяснив с помощью SAX - что за вариант, делать повторно демаршаллизацию уже с помощью JAXB, обращаясь к соответствующему набору классов.
|
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 209 Всего: 537 |
Только лучше не SAX, а StAX. И плюс потребуется писать в поток с буферизацией, чтобы можно было вернуться в начало.
-------------------- 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. |
|||
|
||||
necromancer |
|
|||
Опытный Профиль Группа: Участник Сообщений: 317 Регистрация: 26.7.2006 Где: Москва Репутация: 1 Всего: 7 |
а нельзя:
1 получить запрос. 2 разобрать любым DOM парсером 3 определить параметр 4 разбирать XML в зависимости от параметра? а то вы сейчас накуролеситеЖ буфферизацию, возвращение... запрос то маааленький =) -------------------- С уважением, Виталий Смык ---------------------------------------------------------------------------------------------- SCJP, SCWCD, OCA http://dev.maryno.net/video/ |
|||
|
||||
mbasil |
|
|||
Опытный Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 2 Всего: 13 |
To necromancer
1. SAX не требует полной предварительной разборки всего документа, как это будет в случае DOM: нам надо разобрать только начальные элементы. 2. JAXB предпочтительней DOM, поскольку более эффективно в отличие от универсального DOM. 3. Поскольку JAXB позволяет автоматически генерировать классы, то их порождение делается за десяток секунд. 4. Буферизация это просто. Более того, некоторые потоки позволяют устанавливать маркер, проталкивать содержимое обратно в буфер вызовом одного метода и повторно прочитывать содержимое. 5. В том то и дело, что предлагается подход с минимальным напряжением в смысле кодирования. |
|||
|
||||
Бонифаций |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
Разбирать все равно придется весь запрос. Предварительно или нет. А по Вашему предложению придется разбирать дважды. Сначала SAX - для начала, а потом начистовую
А оно надо? мы же не знаем что нужно автору. Может всего лишь несколько значений из этого запроса. Классы то генерить зачем? Запрос сервлету приходит уже в памяти. Еще буферизировать уже нет смысла. Просто чтобы воспользоваться stax чтоли?
ну уж... Проще тогда распарсить dom и с помощью xpath взять нужные атрибуты. А в зависимости от них - нужные значения.. И кода меньше, и отлаживать проще. Это сообщение отредактировал(а) Бонифаций - 7.5.2008, 01:53 -------------------- Бонифаций. |
||||||
|
|||||||
mbasil |
|
|||
Опытный Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 2 Всего: 13 |
Можно и DOM использовать, да только кодировать руками придется больше и эффективность выполнения будет ниже, поскольку DOM универсален, а за универсальность всегда приходится платить больше.
Впрочем это лишь мое личное мнение. |
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 209 Всего: 537 |
Если запрос действительно маленький, то DOM конечно лучше. А учитывая, что JAXB может принимать на вход DOMSource, то там можно избежать и повторного парсинга. Вот только мы не знаем размер XML, а автор что-то замолчал. -------------------- 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. |
|||
|
||||
newsTester |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 53 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
незнаю как автору, а мне интересно т.к. предстоит парсить XML большого размера с приметивной (3-х уровневой) структурой. Так что вы продолжайте, а я по подслушиваю и еще... хочу JAXB - где его можно скачать? Вместе с доками желательно. Это сообщение отредактировал(а) newsTester - 9.5.2008, 20:19 |
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 209 Всего: 537 |
Скачай JDK 1.6, он туда входит по умолчанию. Доку поищи тут. Но учти, что 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. |
|||
|
||||
Бонифаций |
|
|||
Опытный Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
Вот как раз для такого типа документов лучше - наоборот - не dom a sax -------------------- Бонифаций. |
|||
|
||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |