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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> largeXML 
:(
    Опции темы
DEMOVERSION
  Дата 26.10.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Скажите пожалуйста ц помошью чего можна разобрать очень большой XML. Надо взять с него даные и выполнить некоторые вучисления.

Examle XML:
<root>
<sample a="1 " b="3">
<sample a="1 " b="3">
<sample a="2 " b="3"> // vse strocki odinakovue, menyautsya tolko znacheniya.
<sample a="1 " b="3">
<sample a="65 " b="3">
<sample a="1 " b="3">
.....
</root>

XML files < 20 Mb
PM MAIL   Вверх
pvo
Дата 26.10.2005, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



С помощью SAXParser
PM MAIL ICQ   Вверх
DEMOVERSION
Дата 26.10.2005, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А как насчет Dom4J? А как лучше сохранять даные? Мне надо будет узнать например средние значение по-полю???
PM MAIL   Вверх
pvo
Дата 26.10.2005, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(DEMOVERSION @ 26.10.2005, 11:27)
А как насчет Dom4J? А как лучше сохранять даные? Мне надо будет узнать например средние значение по-полю???


Я с Dom4J не работал, но судя по названию он строит Dom дерево в памяти. При большом размере файла это будет супер не эффективно.
Насчет сохранения - тут все зависит от того, какие еще операции нужны, какое допустимо время отклика и пр.
Средние значения полей можно и при обработке XML посчитать.

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


Шустрый
*


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

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



Source:
<sample a="1" b="2" type="type 1-1"> ----
<sample a="1" b="2" type="type 1-2"> 1 object
<sample a="1" b="2" type="type 1-3"> ----
<sample a="1" b="2" type="type 1-1">-----
<sample a="1" b="2" type="type 1-1">
<sample a="1" b="2" type="type 1-1"> 2 object
<sample a="1" b="2" type="type 1-1">
<sample a="1" b="2" type="type 1-3">-----
<sample a="1" b="2" type="type 1-1"> ......
....
Result:
<result object="1" c="$a[i]+$b[i]" d ="MAX($a)" .....>

obejct-u задаются по тексту, например star="type 1-1" + end = "type 1-2".

Тут надо загонять наверное все в память, а потом уже проходуть по циклу??

PM MAIL   Вверх
pvo
Дата 26.10.2005, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(DEMOVERSION @ 26.10.2005, 11:53)
obejct-u задаются по тексту, например star="type 1-1" + end = "type 1-2".

Не понял.

Цитата(DEMOVERSION @ 26.10.2005, 11:53)
Тут надо загонять наверное все в память, а потом уже проходуть по циклу??

При разборе документа уже выполняется один цикл. Поэтому, по возможности, нужно стараться избежать второго цикла.
Сделать, например, какую-нить карту, в которой ключом будет id объекта, а в значении будет сидеть структурка с необходимыми данными. Причем подсчеты нужно стараться проводить при разборе xml, если это возможно.
PM MAIL ICQ   Вверх
DEMOVERSION
Дата 26.10.2005, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(pvo @ 26.10.2005, 12:11)
Цитата(DEMOVERSION @ 26.10.2005, 11:53)
obejct-u задаются по тексту, например star="type 1-1" + end = "type 1-2".

Не понял.

Есть обьекты по каторым тоже надо делать МАХ,СУММ.... Их можна вычецлить только по заданому шаблону старта обьекта и конца.

Наверное в моем случае надо будет все загонять в масив, или какую-то колекцию??
PM MAIL   Вверх
pvo
Дата 26.10.2005, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(DEMOVERSION @ 26.10.2005, 12:19)
Их можна вычецлить только по заданому шаблону старта обьекта и конца.

понятно.


Цитата(DEMOVERSION @ 26.10.2005, 12:19)
Наверное в моем случае надо будет все загонять в масив, или какую-то колекцию??


Цитата(pvo @ 26.10.2005, 12:11)
Сделать, например, какую-нить карту, в которой ключом будет id объекта, а в значении будет сидеть структурка с необходимыми данными


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


Бывалый
*


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

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



Посмотри XQuery
Простой tutorial здесь

--------------------
Я буду искать лица Твоего, Господи Пс.26:8
PM MAIL ICQ YIM   Вверх
anonymouse
Дата 27.10.2005, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
Есть обьекты по каторым тоже надо делать МАХ,СУММ.... Их можна вычецлить только по заданому шаблону старта обьекта и конца.


в этом случае посмотри надо ли тебе вообще использовать XML парсер, может быть еффективнее будет рассматривать норамльный текстовый файл. В случае с XML лучШе использовать SAXParser он работает как поток. Не о4ень удобно, но зато еффективно.
--------------------
Много чего интересного...
PM MAIL   Вверх
DEMOVERSION
Дата 27.10.2005, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А где писать код для XQuery?
PM MAIL   Вверх
KostenkoSergey
Дата 31.10.2005, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Для подобных задач. SAXParser - однозначно. smile
Вот тебе пример для quick starrt, тысызыть:
Код

package test;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import java.util.*;
public class MySax extends DefaultHandler {
  public MySax(){
    super();
  }
  /**
   * EVENT HANDLERS...
   */
  public void startDocument(){
    System.out.println("Начало документа");
  }
  public void endDocument(){
    System.out.println("Конец документа");
  }
  public void startElement(String uri, String name, String qName, Attributes atts){
      System.out.print("<"+name+">");
  }
  public void endElement(String uri, String name, String qName){
     System.out.println("</"+name+">");
  }

  public void characters(char ch[], int start, int lenght){
      String s = new String(ch, start, lenght).trim();
      System.out.print(s);
  }

}

PM ICQ   Вверх
hatsumeika
Дата 1.11.2005, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



можно попробовать рассмотреть XSLT.
но если опыта работы с XSLT нет, а с Java есть, лучше использовать SAX.
PM MAIL   Вверх
Slanix
Дата 2.11.2005, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(DEMOVERSION @ 27.10.2005, 11:45)
А где писать код для XQuery?

Чтот значит где? Есть библиотеки. Как в случае и с SQL.
Я в своей работе использовал XML native data base eXist.
и писал что-то вроде такого:
Код

final XPathQueryServiceImpl service = (XPathQueryServiceImpl) 
                    collection.getService("XPathQueryService", "1.0");

String xq = " let $user := collection(\""+PATH+"\")/doc('users.xml')//users/user[@uid=\""+ uid +"\"]"
                                 + "let $rght := fn:data($user/right)"
                                 + "for $rights in document('users.xml')//rights/right[@name=$rght]"
                                 + " return"
                                 + " <user> {$user/@uid} {$user/@fullname} {$user/@service}"
                                 + "    {$rights}"
                                 + " </user>";

ResourceSet result = service.query(xq);



Это сообщение отредактировал(а) Slanix - 2.11.2005, 07:21
--------------------
Я буду искать лица Твоего, Господи Пс.26:8
PM MAIL ICQ YIM   Вверх
Andrey1
Дата 10.11.2005, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(DEMOVERSION @ 27.10.2005, 11:45)
А где писать код для XQuery?
Цитата(Slanix @ 2.11.2005, 07:21)
Я в своей работе использовал XML native data base eXist.

Из своего опыта могу сказать, что если:
1) Файл до 30 Mb - можно использовать просто реализацию XQuery, например, Saxon мне очень нравится (в нем же есть и реализация XSLT).
2) 30-100 Mb (ориентировочно) - eXist вполне годится.
3) >100 Mb - Sedna Native DB.

XQuery - достаточно простой и красивый язык. На нем же можно веб-программировать.

Да, и возможно все это smile smile

Это сообщение отредактировал(а) Andrey1 - 10.11.2005, 10:59


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

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

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


 




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


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

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