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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML + сеть, Как передать XML объекты по сети? 
:(
    Опции темы
KOp4iK
Дата 30.5.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго всем!

Есть клиент - сервер! Задумалость что они будут общаться через XML т.е. 
объект - > XML - > что-то - > XML - > объект. 

Ну и как видно оз диаграмки проблемма в "что-то" точнее в "чём-то", что: 
1) возмёт XML конвертнёт его во что-то себе удобное
2) пошлёт это с одной стороны, 
3) примет это с другой стороны,
4) превратит в XML.

Ах, да!!! Чуть не забыл - хотелось бы обойтись отечественным (Солнечным) производителем... А то цеплять чё-нить чужое ох как не хоцца!

Зарание пасиб! 
PM MAIL   Вверх
s8e8r8g8e
Дата 30.5.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а зачем хмл посылать как что-то?
если я правильно помню какие-то плюсы хмл, то его текстовое представление считалось плюсом, т.к. текст мол платформенно независим, а значит структура на любой машине будет одна и та  же. 
PM MAIL   Вверх
KOp4iK
Дата 30.5.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Тоесть, на сколько я понимаю, осалось: 
1) org.w3c.dom.Document который я опрометчиво обозвал XML'ом переделать в String
2) послать его куда надо;
3) прочитать в String
4) Запихнуть его обратно в документик

Я правильно понял?

Тогда внимание следующий вопрос: Как правильно исполнить 4-ый пункт? Да и есть у меня сильная подоряна что можно как-то автоматичесски это сделать!
 
PM MAIL   Вверх
Beard
Дата 30.5.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

    public static Document parseXmlString(String s) {
        Document result = null;
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setExpandEntityReferences(false);
            factory.setValidating(false);
            result = factory.newDocumentBuilder().parse(new InputSource(new StringReader(s)));
        } catch (SAXException e) {
         e.printStackTrace();
        } catch (ParserConfigurationException e) {
         e.printStackTrace();
        } catch (IOException e) {
         e.printStackTrace();
        }
        return result;
    }
 
PM MAIL   Вверх
KOp4iK
Дата 30.5.2006, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



И всётаки не совсем получаеться! smile

А в ходе даю:
Код

<?xml version="1.0" encoding="UTF-8"?>
<project name="projectName">
    <projectFile name="projectFileName1" text="projectFileText1"/>
    <projectFile name="projectFileName2" text="projectFileText2"/>
</project>

собственно сам код:
Код

                Document result = null;
                try {
                    line = "stro4ka s XML'om"

                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                    factory.setExpandEntityReferences(false);
                    factory.setValidating(false);
/* * */         result = factory.newDocumentBuilder().parse(new InputSource(new StringReader(line)));

                    Project project = new Project();
                    project.fromXML(result.getDocumentElement());
                } catch (SAXException e) {
                 e.printStackTrace();
                } catch (ParserConfigurationException e) {
                 e.printStackTrace();
                } catch (IOException e) {
                 e.printStackTrace();
                }

но после исполнения строчки "/* * */" переменная result оказываетсья не заполненой... Может я слишком буквально поня предидущий пост? smile  
PM MAIL   Вверх
LSD
Дата 30.5.2006, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Вот так все работает:
Код
  public static void main(String[] args)
  {
    Document result = null;
    try
    {
      String line = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\t\n" +
          "<project name=\"projectName\">\t\n" +
          "    <projectFile name=\"projectFileName1\" text=\"projectFileText1\"/>\t\n" +
          "    <projectFile name=\"projectFileName2\" text=\"projectFileText2\"/>\t\n" +
          "</project>";
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      factory.setExpandEntityReferences(false);
      factory.setValidating(false);
      /* * */
      result = factory.newDocumentBuilder().parse(new InputSource(new StringReader(line)));
      System.out.println("result == null - " + (result == null));
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }

result - не null. 


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


Шустрый
*


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

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



Нееееее smile))) 

result - то конечно не null... А вот все его поля ... как то не особо... Ну или другой вопрос: Как мне из этого result'a получить данные?

Например текст второго файла в проекте? 
PM MAIL   Вверх
Beard
Дата 31.5.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Ну или другой вопрос: Как мне из этого result'a получить данные?

Например текст второго файла в проекте?  


Код

        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\t\n" +
        "<project name=\"projectName\">\t\n" +
        "    <projectFile name=\"projectFileName1\" text=\"projectFileText1\"/>\t\n" +
        "    <projectFile name=\"projectFileName2\" text=\"projectFileText2\"/>\t\n" +
        "</project>";
        Document document = parseXmlString(xml);
        
        Node node = org.apache.xpath.XPathAPI.selectSingleNode(document, "/project/projectFile[@name='projectFileName2']/@text");
        System.out.println(node.getNodeValue());


метод parseXmlString() - это отсюда.
И все ноды в полученном Document существуют - это можно проверить "тупым" обходом документа посредством Node::getChildNodes() и Node::getAttributes() (для данного примера - если надо получачть комменты, процессинг-инстракшн - достаточно вызвать соответствующие методы)  

Это сообщение отредактировал(а) Beard - 31.5.2006, 10:48
PM MAIL   Вверх
KOp4iK
Дата 31.5.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А разьве нельзя по документу как по дереву ходить? Ну что-то типа если входной XML 
Код

<?xml version="1.0" encoding="UTF-8"?>
<project name="projectName">
    <projectFile name="projectFileName1" text="projectFileText1"/>
    <projectFile name="projectFileName2" text="projectFileText2"/>
</project>

и он уже в документе то:
document.getRootElement() - возвращает 
Код

<project name="projectName">
    <projectFile name="projectFileName1" text="projectFileText1"/>
    <projectFile name="projectFileName2" text="projectFileText2"/>
</project>

document.getRootElement().getElementByTagName("projectFile") 
Код

    <projectFile name="projectFileName1" text="projectFileText1"/>
    <projectFile name="projectFileName2" text="projectFileText2"/>

как список... в общем 
PM MAIL   Вверх
Beard
Дата 31.5.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

А разьве нельзя по документу как по дереву ходить?

Блин - я даже написал какие методы использовать для этого (getChildNodes() и иже с ним)!

Цитата

и он уже в документе то:
document.getRootElement() - возвращает 
Код

<project name="projectName">
    <projectFile name="projectFileName1" text="projectFileText1"/>
    <projectFile name="projectFileName2" text="projectFileText2"/>
</project>


Код

document.getDocumentElement()
  или
document.getFirstChild()

именно это тебе и возвратят

Цитата

document.getRootElement().getElementByTagName("projectFile") 

Это же не Javascript, а DOM-модель! Хочешь получить элемент по имени без написания своего обходчика - пользуйся XPath (пример - в моей прошлой мессаге) 
PM MAIL   Вверх
Beard
Дата 1.6.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Beard @  31.5.2006,  11:11 Найти цитируемый пост)

Цитата

Цитата

document.getRootElement().getElementByTagName("projectFile") 


Это же не Javascript, а DOM-модель! Хочешь получить элемент по имени без написания своего обходчика - пользуйся XPath (пример - в моей прошлой мессаге)  

Сорри - наврал:
Цитата

NodeList org.w3c.dom.Document.getElementsByTagName(String tagname)

Returns a NodeList of all the Elements in document order with a given tag name and are contained in the document. 

Parameters:
          tagname The name of the tag to match on. The special value "*" matches all tags. For 
          XML, the tagname parameter is case-sensitive, otherwise it depends on the case-sensitivity of the markup language in use.
Returns:
          A new NodeList object containing all the matched Elements
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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