Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > largeXML |
Автор: DEMOVERSION 26.10.2005, 10:35 |
Скажите пожалуйста ц помошью чего можна разобрать очень большой 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 |
Автор: pvo 26.10.2005, 11:13 |
С помощью SAXParser |
Автор: DEMOVERSION 26.10.2005, 11:27 |
А как насчет Dom4J? А как лучше сохранять даные? Мне надо будет узнать например средние значение по-полю??? |
Автор: pvo 26.10.2005, 11:38 | ||
Я с Dom4J не работал, но судя по названию он строит Dom дерево в памяти. При большом размере файла это будет супер не эффективно. Насчет сохранения - тут все зависит от того, какие еще операции нужны, какое допустимо время отклика и пр. Средние значения полей можно и при обработке XML посчитать. |
Автор: DEMOVERSION 26.10.2005, 11:53 |
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". Тут надо загонять наверное все в память, а потом уже проходуть по циклу?? |
Автор: pvo 26.10.2005, 12:11 | ||||
Не понял.
При разборе документа уже выполняется один цикл. Поэтому, по возможности, нужно стараться избежать второго цикла. Сделать, например, какую-нить карту, в которой ключом будет id объекта, а в значении будет сидеть структурка с необходимыми данными. Причем подсчеты нужно стараться проводить при разборе xml, если это возможно. |
Автор: DEMOVERSION 26.10.2005, 12:19 | ||||
Есть обьекты по каторым тоже надо делать МАХ,СУММ.... Их можна вычецлить только по заданому шаблону старта обьекта и конца. Наверное в моем случае надо будет все загонять в масив, или какую-то колекцию?? |
Автор: pvo 26.10.2005, 12:34 | ||||||
понятно.
|
Автор: Slanix 27.10.2005, 07:17 |
Посмотри XQuery Простой tutorial http://www.brics.dk/~amoeller/XML/querying/listexp.html |
Автор: anonymouse 27.10.2005, 10:19 | ||
в этом случае посмотри надо ли тебе вообще использовать XML парсер, может быть еффективнее будет рассматривать норамльный текстовый файл. В случае с XML лучШе использовать SAXParser он работает как поток. Не о4ень удобно, но зато еффективно. |
Автор: DEMOVERSION 27.10.2005, 11:45 |
А где писать код для XQuery? |
Автор: KostenkoSergey 31.10.2005, 15:58 | ||
Для подобных задач. SAXParser - однозначно. ![]() Вот тебе пример для quick starrt, тысызыть:
|
Автор: hatsumeika 1.11.2005, 13:43 |
можно попробовать рассмотреть XSLT. но если опыта работы с XSLT нет, а с Java есть, лучше использовать SAX. |
Автор: Slanix 2.11.2005, 07:21 | ||||
Чтот значит где? Есть библиотеки. Как в случае и с SQL. Я в своей работе использовал XML native data base eXist. и писал что-то вроде такого:
|
Автор: Andrey1 10.11.2005, 10:55 | ||||
Из своего опыта могу сказать, что если: 1) Файл до 30 Mb - можно использовать просто реализацию XQuery, например, Saxon мне очень нравится (в нем же есть и реализация XSLT). 2) 30-100 Mb (ориентировочно) - eXist вполне годится. 3) >100 Mb - Sedna Native DB. XQuery - достаточно простой и красивый язык. На нем же можно веб-программировать. Да, и возможно все это ![]() ![]() |
Автор: onsh76 11.5.2006, 00:09 |
Меня интересует вопрос: помогает ли удаление whitespace characters при обработке/чтении больших хмл файлов. Существуют ли тулзы для оного удаления? |
Автор: ALKS 11.5.2006, 00:52 |
если струкиура XML известна и статична - JAXB. а если схема есть то вообще просто всё. |