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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение свойств объектов 
:(
    Опции темы
3,14
Дата 26.1.2005, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



Цитата(zss @ 26.1.2005, 14:32)
А что если этот файл необходимо бет читать сразу нескольким приложениям - тогда придется отсылать каждому ?

Вообще говоря, есть несколько вариантов, либо отсылаешь каждому, либо сохраняешь в доступном для клиентских приложений ресурсе.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
zss
Дата 26.1.2005, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я вроде нашел решение.

Чтоб избавиться от анализа руками я написал два рекурсивных метода, которые позволяют найти любую ноду во всей иерархии xml документа

Два метода потому, что названия нод могут повторяться на одном уровне (если такого нет, то достаточно вызова первого метода)
К примеру (повторяются properties)
Код

<root>
   <object_1>
       <properties>
           <1>1</1>
           <2>2</2>
       </properties>
   </object_1>
   <object_2>
       <properties>
           <3>3</3>
           <4>4</4>
       </properties>
   </object_2>
</root>


Так вот если я хочу найти например список всех свойств для 2 объекта, то достаточно вызвать
Код

       NodeList rootList = document.getDocumentElement().getChildNodes();
       if (rootList == null){
           throw new NullPointerException();
       }

       NodeList propertyList = GetList (rootList, "object_2", "properties");
       if (propertyList == null){
           throw new NullPointerException();
       }



Сами методы
Код

protected NodeList GetSublist ( NodeList rootList, String nodeName ) {

   for ( int i = 0; i < rootList.getLength(); i++ ) {
       Node node = rootList.item(i);
       if ( rootList.item(i).getNodeName().equalsIgnoreCase(nodeName) ) {
           return rootList.item( i ).getChildNodes();
       }
       else{
           NodeList list = GetSublist (node.getChildNodes(), nodeName);
           if (list != null) return list;
       }
   }

   return null;
}

protected NodeList GetList ( NodeList rootList, String nodeName,  String listName) {

       for ( int i = 0; i < rootList.getLength(); i++ ) {

           Node node = rootList.item(i);
           if (node.getNodeName().equalsIgnoreCase(nodeName)){
               NodeList list = GetSublist (node.getChildNodes(), listName);
               if (list != null) return list;
           }
           else{
               NodeList list = GetList (node.getChildNodes(), nodeName, listName);
               if (list != null) return list;
           }

       }

       return null;
   }



Здесь осуществляется рекурсия для любого уровня вложенности

Правда пока не до конца протестил, но пока вроде пашет (может кому и еще пригодится smile)

Это сообщение отредактировал(а) zss - 26.1.2005, 15:48
PM MAIL ICQ   Вверх
3,14
Дата 26.1.2005, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



А если что-то измениться в описании обьекта весь код будешь переписывать?


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
zss
Дата 26.1.2005, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так в твоем случае ведь тоже придется анализировать (или ты хочешь сказать, что это делается атоматом ?)

Ведь отсылая сообщение надо знать описание объекта
PM MAIL ICQ   Вверх
3,14
Дата 27.1.2005, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



Вообще говоря можно сделать вариант при к-ом не нужно будет прилагать практически никаких усилий даже при смене кода, но ежели надо записать в XML что-то простое - то пожайлуста, вот пример записи в SOAP документ Hasstable-а (немного изменённый вариант кода взятого с http://www-106.ibm.com/developerworks/webs.../ws-soapmap2/):

Код

import java.util.*;
import java.io.*;
import org.apache.soap.util.xml.*;
import org.apache.soap.encoding.SOAPMappingRegistry;
import org.apache.soap.rpc.SOAPContext;
import org.apache.soap.encoding.soapenc.HashtableSerializer;
import org.apache.soap.encoding.soapenc.SoapEncUtils;

public class SoapTest
{
public static void main(String[] args) throws Exception
{
 Hashtable numbers = new Hashtable();
 numbers.put("one", new Integer(1));
 numbers.put("two", new Integer(2));
 java.lang.Class javaType = numbers.getClass();
 String inScopeEncStyle = "UTF-16";
 String context = "root_node";
 Writer sink = new FileWriter("out.xml");
 NSStack nsStack = new NSStack();
 nsStack.pushScope();
 SOAPMappingRegistry xjmr = new SOAPMappingRegistry();
 SOAPContext ctx = new SOAPContext();
 new HashtableSerializer().marshall(inScopeEncStyle, javaType, numbers, context, sink, nsStack, xjmr, ctx);
 sink.flush();
 nsStack.popScope();
}
}


Результат:
Цитата

<root_node xmlns:ns1="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://xml.apache.org/xml-soap" ns1:type="ns2:Map" xmlns:ns3="http://schemas.xmlsoap.org/soap/envelope/" ns3:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<item>
<key xmlns:ns4="http://www.w3.org/2001/XMLSchema" ns1:type="ns4:string">two</key>
<value xmlns:ns5="http://www.w3.org/2001/XMLSchema" ns1:type="ns5:int">2</value>
</item>
<item>
<key xmlns:ns6="http://www.w3.org/2001/XMLSchema" ns1:type="ns6:string">one</key>
<value xmlns:ns7="http://www.w3.org/2001/XMLSchema" ns1:type="ns7:int">1</value>
</item>
</root_node>


Если тебе интересен вариант типа этого спрашивай, расскажу дальше.
Чуть не забыл, для запуска приложения (для компиляции не надо), так же нужны apache-вские mail.jar и activation.jar, пути к ним должны стоять в classpath.

Это сообщение отредактировал(а) 3,14 - 28.1.2005, 17:23


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
zss
Дата 28.1.2005, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



3,14, спасибо - попробую разобраться

Кстати, а существует ли иерархический класс в java (что-то вроде иерархическрго списка)
PM MAIL ICQ   Вверх
3,14
Дата 28.1.2005, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



Чего-то вроде класс Tree нету (хотя разных реализаций по нету выше крыше), вообще говоря класса Map как правило вполне достаточно. К примеру используешь в качестве ключа корневой эл-т а в качестве обьекта хранения - список потомков.
Если же тебе нужно дерево для работы с xml то это совсем другое дело.

Это сообщение отредактировал(а) 3,14 - 28.1.2005, 17:22


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
zss
Дата 28.1.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(3)
Если же тебе нужно дерево для работы с xml то это совсем другое дело



ага smile
PM MAIL ICQ   Вверх
Domestic Cat
Дата 28.1.2005, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(3)
Чего-то вроде класс Tree нету (хотя разных реализаций по нету выше крыше)


Как это нету??? А JTree? Совсем ведь необязательно чтобы оно рисовалось, можно и так им пользоваться.


--------------------

PM   Вверх
LSD
Дата 29.1.2005, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(Domestic @ 28.1.2005, 20:18)
А JTree? Совсем ведь необязательно чтобы оно рисовалось, можно и так им пользоваться.

Лучше ограничится TreeModel, вернее его реализациями, например DefaultTreeModel.

zss
А зачем тебе отдельное дерево, чем DOM плох?


--------------------
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   Вверх
zss
Дата 29.1.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(LSD @ 29.1.2005, 01:24)
А зачем тебе отдельное дерево, чем DOM плох?


Я перевожу данные из xml-файла в собственную иерархическую структуру, которая удобна для доступа к данным.

Пока уровень вложенности = 3. Но данные преобразуются к определенному виду.
Node - имеет имя и список subnode.
Subnode - имеет имя и свойства.
Свойства двуч видов.

Если использовать DOM, то это заново придется анализировать, а так я пока обхожусь ArrayList

PM MAIL ICQ   Вверх
LSD
Дата 29.1.2005, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Тогда посмотри DefaultTreeModel, вот тебе готовая древовидная структура. Плюс еще в том, что при желании отобразить ее будет элементарно.


--------------------
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   Вверх
zss
Дата 2.2.2005, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В общем я долго общался с людьми на счет SOAP, так вот они отказываются от этого и хотят увидеть именно создание xml и доступ к нему по сети.

при этом возникают следующие проблеммы:
1. Необходимо запустить серверное приложение и создать xml
2. На клиентской машине запустить приложение. При этом оно должно знать где находится этот xml. Тоесть либо задавать путь к нему через командную строку, либо удаленно запускать само приложение с указанием пути (больше я ничего не придумал)
3. Прочитать xml с сервера локальной сети (А как это сделать ?)


Что Вы можете предложить ? Или может быть есть еще какие варианты ?
Особенно интересует пункт 3.

PM MAIL ICQ   Вверх
3,14
Дата 2.2.2005, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



1. Создать сервлет к-ый по запросу генерирует требуемый XML документ
2. В качестве указания пути использовать URL доступа к сервлету
3. Если средствами java то
Код

 InputStream in = new URL("http://xml_server").openStream();

Ну а читать из InputStream ты наверное умеешь smile

Это сообщение отредактировал(а) 3,14 - 2.2.2005, 16:02


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
zss
Дата 2.2.2005, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(3)
URL("http://xml_server")


Что-то не очень понял smile


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

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

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


 




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


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

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