![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| antsh |
|
||||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 72 Регистрация: 16.9.2005 Репутация: нет Всего: нет |
Привет всем.
У меня не простой вопрос. Как мне сделать десериализацию из ХМЛ в Яву. У меня есть 2 метода: в ХМЛ это actions и childs в Яве это executableActions и setChilds Возможные теги внутри <actions> и <childs> строго определены и им соответствуют конкретные строчки явы. Ниже подробный пример того что мне нужно. Ява представление:
ХМЛ представление.
Как мне это дело имплементировать? Это сообщение отредактировал(а) antsh - 27.10.2007, 15:59 |
||||
|
|||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Ну, уж сомневаюсь, что есть такой стандартный механизм... А просто свой строящий менеджер сделать нельзя?
|
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Вообще-то, методы не сериализуются. Учитывая пример (например, добавление производится за счёт своего метода, а не просто включением в коллекцию, что видимо из-за необходимости проведения каких-то дополнительных действий), могу предложить лишь то же самое, что и Platon - написать свой загрузчик из xml. И там уже реализовать всё, что душе угодно. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| antsh |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 72 Регистрация: 16.9.2005 Репутация: нет Всего: нет |
Хммм жалко, что нету.
Лично я собираюсь использовать JDOM для парсинга ХМЛ и затем: actions = getAllActionsNodesFromXml iterate through actions { action = actions.next if(action == click) { selenium.cick("FOO"); } if(action == type) { selenium.type("input_field","FOO"); } } Чё скажите? |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
А чё - ничё так. Если подобных классов в xml у тебя более одного-двух, то стоит подумать о написании некоего универсального загрузчика. Чтобы для каждого нового класса надо было реализовать минимум. Идеально вообще просто инициализировать загрузчик данными, но это не всегда бывает оптимально. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Platon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Думаю, попахивает плюсиком, чисто случайно в доках наткнулся на XMLDecoder/Encoder, по моему для вашего случая то, что доктор прописал!!!
Да, я ошибался, есть такой стандартный механизм, только ботать много придется, вот нарытый материал: Long TermPersistance of Java Using XMLEncoder + бонус трек (мини пример)
|
||||
|
|||||
| v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: 8 Всего: 56 |
Таких механизмов множество.
Например мне понравился XStream . Разобратся даже для новичка как два пальца .. Добавлено через 4 минуты и 20 секунд ... почитай про него. в твоём случае должен быть некий класс с двумя членами :childs & actions , а каждый из этих классов должен иметь соответсвующие члены: childs - масив строк child actions - click - type - select и т.д. |
|||
|
||||
| m1ha |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 14.5.2007 Репутация: 1 Всего: 1 |
А вот у меня немного другая ситуация. Есть абстрактный класс Animal. И на основе xml я должен создавать обьекты Cat, Dog... и т.д.(все они наследуюся от Animal). XML выглядят примерно так
Вся проблема в том что я не могу как в этом примере
указать методу dec.readObject(); Какой именно тип животного я получаю, так как я этого сам не знаю, это написано в xml. Если бы животных было 1-2 можно было бы if'aми. Но так как их довольно много... Есть у кого какие соображения по этому поводу ? |
||||||
|
|||||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Можно сделать так: В хмл с данными о животных для каждого животного можно указать тэг с неким идентификатором животного (cat, dog, frog, etc.). Теперь грузим хмл сакс-парсером и обрабатываем каждое животное. Зная тэг животного мы можем вызвать специфичную для него фабрику. Один минус - десериализация в этом случае не будет автоматической. Зато будет работать. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
m1ha, а собственно чего ты хочешь? я наверно уже страдаю каким-то шовинизмом, но ты сам не ведаешь о чем говоришь!
Это написано в xml, Но ты знаешь, что это животное. Более того, ты можешь вызывать instanceof чтоб проверить тип объекта. В общем не пребедняйся, а как мне как-то говорили "Учи матчасть". ЗЫ: Тебе открыты любые XML сериализаторы, выбирай. |
|||
|
||||
| m1ha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 14.5.2007 Репутация: 1 Всего: 1 |
Проблема решена после прочтение документации по XStream
|
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Ну, никогда не поздно начать наслаждаться им. Пример в студию. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
nornad, нет, это соблазн от лукавого!!! Я помню то время, когда я задавал невнятные и думал совсем неправильно. Да и сейчас не скажу что крутой, но опыту уже больше. И начинают раздражать некоторые вопросы. Но, все время стараюсь себя бить по пальцам, как только соберусь написать что-нибудь неприятное ^_^ Получается увы с переменным успехом.
ЗЫ. Но, на самом деле я добрый и пушистый! |
|||
|
||||
| m1ha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 14.5.2007 Репутация: 1 Всего: 1 |
Platon был прав всё просто
Работает как надо, какое бы животное не было бы описано. Просто я был уверен в том, что (Animal)dec.readObject() прибьёт все переменные пресущие только конкретному животному, которые не описаны в классе Animal, но был не прав :(. Извеняюсь за то, что отнял время своей невнимательностью. Время поста 04:51, наверно был слишком усталый Это сообщение отредактировал(а) m1ha - 10.12.2007, 13:51 |
|||
|
||||
![]()
|
| Правила форума "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. |