Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с XML разбором 
:(
    Опции темы
Fame_biz
Дата 30.4.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.2.2007

Репутация: нет
Всего: нет



Есть такая ситуация :
Есть 1 сервлет который на вход получает пост запрос, в котором находиться XML 
Код

<?xml version="1.0" encoding="UTF-8"?>
<REQUEST xmlns="http://ws.ua/schema/reqestGateway" version="1.0">
    <FEATURE>1</FEATURE>
    <SESSIONID>mbcvLYzTltKT2rbm6PpsDzl2J7rjGJJvfFFCnC5J21syjcLnBX4n!630080495</SESSIONID>
    <REQUEST_DATA>
        <MFO>123456</MFO>
        <ACCOUNT>12345678901234</ACCOUNT>
    </REQUEST_DATA>
</REQUEST>


Код

<?xml version="1.0" encoding="UTF-8"?>
<REQUEST xmlns="http://ws.ua/schema/reqestGateway" version="1.1">
    <FEATURE>1</FEATURE>
    <SESSIONID>mbcvLYzTltKT2rbm6PpsDzl2J7rjGJJvfFFCnC5J21syjcLnBX4n!630080495</SESSIONID>
    <REQUEST_DATA>
        <MFO>123456</MFO>
        <ACC>12</ACC>
        <CMD>p12-16</CMD>
        <ACCOUNT>12345678901234</ACCOUNT>
    </REQUEST_DATA>
</REQUEST>


но данный XML может меняться от разных версий корневого атрибута version="1.0". Все изменения происходят только внутри REQUEST_DATA
Также существуют на каждый запрос XSD схемы.

И тут возникает вопрос каким образом можно реализовать разбор XML документа в зависимости от version пришедшего XML и FEATURE.
ет вопрос каким образом можно реализовать разбор XML документа взависимости от version пришедшого XML и FEATURE.

Это сообщение отредактировал(а) Fame_biz - 30.4.2008, 16:42
PM MAIL   Вверх
mbasil
Дата 30.4.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 2
Всего: 13



Разбирать с помощью SAX до уровня  REQUEST_DATA. Для всех вариантов схем с помощью утилиты xjc породить наборы классов. Выяснив с помощью SAX - что за вариант, делать повторно демаршаллизацию уже с помощью JAXB, обращаясь к соответствующему набору классов.
PM MAIL   Вверх
LSD
Дата 1.5.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
necromancer
Дата 6.5.2008, 18:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 317
Регистрация: 26.7.2006
Где: Москва

Репутация: 1
Всего: 7



а нельзя:
1 получить запрос. 
2 разобрать любым DOM парсером
3 определить параметр
4 разбирать XML в зависимости от параметра?

а то вы сейчас накуролеситеЖ буфферизацию, возвращение... запрос то маааленький =)


--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
mbasil
Дата 6.5.2008, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 2
Всего: 13



To necromancer 
1. SAX не требует полной предварительной разборки всего документа, как это будет в случае DOM: нам надо разобрать только начальные элементы. 
2. JAXB предпочтительней DOM, поскольку более эффективно в отличие от универсального DOM.
3. Поскольку JAXB позволяет автоматически генерировать классы, то их порождение делается за десяток секунд.
4. Буферизация это просто. Более того, некоторые потоки позволяют устанавливать маркер, проталкивать содержимое обратно в буфер вызовом одного метода и повторно прочитывать содержимое. 
5.  В том то и дело, что предлагается подход с минимальным напряжением в смысле кодирования. 

PM MAIL   Вверх
Бонифаций
Дата 7.5.2008, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



Цитата(mbasil @  6.5.2008,  21:27 Найти цитируемый пост)
SAX не требует полной предварительной разборки всего документа, как это будет в случае DOM: нам надо разобрать только начальные элементы. 


Разбирать все равно придется весь запрос. Предварительно или нет. А по Вашему предложению придется разбирать дважды. Сначала SAX - для начала, а потом начистовую



Цитата(mbasil @  6.5.2008,  21:27 Найти цитируемый пост)
 Поскольку JAXB позволяет автоматически генерировать классы, то их порождение делается за десяток секунд.


А оно надо? мы же не знаем что нужно автору. Может всего лишь несколько значений из этого запроса. Классы то генерить зачем?

Цитата(mbasil @  6.5.2008,  21:27 Найти цитируемый пост)
Буферизация это просто. Более того, некоторые потоки позволяют устанавливать маркер, проталкивать содержимое обратно в буфер вызовом одного метода и повторно прочитывать содержимое. 


Запрос сервлету приходит уже в памяти. Еще буферизировать уже нет смысла. Просто чтобы воспользоваться stax чтоли?

Цитата(mbasil @  6.5.2008,  21:27 Найти цитируемый пост)
 В том то и дело, что предлагается подход с минимальным напряжением в смысле кодирования. 


ну уж... Проще тогда распарсить dom и с помощью xpath взять нужные атрибуты.  А в зависимости от них - нужные значения.. И кода меньше, и отлаживать проще.


Это сообщение отредактировал(а) Бонифаций - 7.5.2008, 01:53


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
mbasil
Дата 7.5.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 2
Всего: 13



Можно и DOM использовать, да только кодировать руками придется больше и эффективность выполнения будет ниже, поскольку DOM универсален, а за универсальность всегда приходится платить больше.
Впрочем это лишь мое личное мнение. 
PM MAIL   Вверх
LSD
Дата 7.5.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(necromancer @  6.5.2008,  19:17 Найти цитируемый пост)
а то вы сейчас накуролеситеЖ буфферизацию, возвращение... запрос то маааленький =)

Если запрос действительно маленький, то 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.
PM MAIL WWW   Вверх
newsTester
Дата 9.5.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Цитата

Вот только мы не знаем размер XML, а автор что-то замолчал.

незнаю как автору, а мне интересно т.к. предстоит парсить XML большого размера с приметивной (3-х уровневой) структурой. Так что вы продолжайте, а я по подслушиваю  smile 
и еще... хочу JAXB - где его можно скачать? Вместе с доками желательно.

Это сообщение отредактировал(а) newsTester - 9.5.2008, 20:19
PM MAIL   Вверх
LSD
Дата 11.5.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(newsTester @  9.5.2008,  21:03 Найти цитируемый пост)
и еще... хочу JAXB - где его можно скачать? Вместе с доками желательно.

Скачай 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.
PM MAIL WWW   Вверх
Бонифаций
Дата 11.5.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



Цитата(newsTester @  9.5.2008,  20:03 Найти цитируемый пост)
т.к. предстоит парсить XML большого размера с приметивной (3-х уровневой) структурой


Вот как раз для такого типа документов лучше - наоборот -  не dom a sax


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1541 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.