powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсинг xml с массивом элементов
15 сообщений из 15, страница 1 из 1
Парсинг xml с массивом элементов
    #39977801
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

есть xml:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="Windows-1251"?>	
	<BCEntry BC="103">
		<ParInfo Rn="12" Id="414056"/>
		<Accounts Account="0010" DateIn="2013-01-09" Status="AC"/>
		<Accounts Account="0011" DateIn="2013-01-09" Status="AC"/>
		<Accounts Account="0012" DateIn="2013-01-09" Status="AC"/>
		<Accounts Account="0013" DateIn="2013-01-09" Status="AC"/>
	</BCEntry>
	<BCEntry BC="597">
		<ParInfo Rn="45" Id="109240">
			<RList RDate="2016-05-17"/>
		</ParInfo>
		<Accounts Account="3010" DateIn="2015-09-14" Status="AC"/>
	</BCEntry>



Размер xml файла до 12 мб,
Из xml файла нужно забрать все данные!!

посоветуйте, какой парсер выбрать?

И второй вопрос, как распарсить массив элементов?
Код: xml
1.
<Accounts ... />
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39977805
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_Aleks,

Есть два вида парсеров DOM и SAX. Парсеры DOM загружают всё дерево XML в ОЗУ и позволяют осуществлять "навигацию" по дереву в любом направлении. Соответственно. размер файла ограничивается размером выделенного ОЗУ. Парсеры SAX работают только в потоке и в одном направлении, обратная навигация невозможна. Но парсеры SAX не ограничены размером ОЗУ, т.к. могут не хранить уже обработанную часть файла в памяти. Для больших файлов однозначно только SAX. Реализаций парсеров и того и другого вида больше одного, выбирайте на цвет и вкус...
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39977822
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Garrick,

Спс,

Выбрал парсер DOM....
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39977823
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как в парсере дом обойти массив

Код: xml
1.
2.
3.
4.
5.
	
<Accounts Account="0010" DateIn="2013-01-09" Status="AC"/>
<Accounts Account="0011" DateIn="2013-01-09" Status="AC"/>
<Accounts Account="0012" DateIn="2013-01-09" Status="AC"/>
<Accounts Account="0013" DateIn="2013-01-09" Status="AC"/>
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39977825
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_Aleks
Как в парсере дом обойти массив

Так же, как и не массив

childNodes()
nextSibling()
или как-то так
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39977890
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_Aleks
Добрый день,

есть xml:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="Windows-1251"?>	
	<BCEntry BC="103">
		<ParInfo Rn="12" Id="414056"/>
		<Accounts Account="0010" DateIn="2013-01-09" Status="AC"/>
		<Accounts Account="0011" DateIn="2013-01-09" Status="AC"/>
		<Accounts Account="0012" DateIn="2013-01-09" Status="AC"/>
		<Accounts Account="0013" DateIn="2013-01-09" Status="AC"/>
	</BCEntry>
	<BCEntry BC="597">
		<ParInfo Rn="45" Id="109240">
			<RList RDate="2016-05-17"/>
		</ParInfo>
		<Accounts Account="3010" DateIn="2015-09-14" Status="AC"/>
	</BCEntry>



Размер xml файла до 12 мб,
Из xml файла нужно забрать все данные!!

посоветуйте, какой парсер выбрать?

И второй вопрос, как распарсить массив элементов?
Код: xml
1.
<Accounts ... />



Могу посоветовать библиотеку из соседней ветки.

Она умеет читать xml файлы.

17790633

Хорошего вам дня!
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39977916
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Спасибо, но не думаю что тим одобрит, если я в проект буду добавлять какую нить либу...
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39977918
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zzz79,

ок, тогда напишу на DOM и на SAX, посмотрим что тим одобрит)
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39977929
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleks_Aleks
Zzz79,

ок, тогда напишу на DOM и на SAX, посмотрим что тим одобрит)

на jaxb
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39977938
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут как-то семантически некрасиво.
Код: xml
1.
2.
3.
4.
<Accounts Account="0010" DateIn="2013-01-09" Status="AC"/>
<Accounts Account="0011" DateIn="2013-01-09" Status="AC"/>
<Accounts Account="0012" DateIn="2013-01-09" Status="AC"/>
<Accounts Account="0013" DateIn="2013-01-09" Status="AC"/>


Масло маслянное. Тег аккаунты внутри которого... атрибуты аккаунт и дата.

Надо было сделать так.
Код: xml
1.
2.
3.
<Accounts>
 <Account Id="0011" DateIn="2013-01-09" Status="AC"/> 
 .....
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39978021
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_Aleks
Valentin Kolesnikov,

Спасибо, но не думаю что тим одобрит, если я в проект буду добавлять какую нить либу...


Либа open source, MIT лицензия.

Пример решения 2-ой задачи:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
              String xml = "<?xml version=\"1.0\" encoding=\"Windows-1251\"?>\n"
              + "    <root>\n"
              + "        <BCEntry BC=\"103\">\n"
              + "               <ParInfo Rn=\"12\" Id=\"414056\"/>\n"
              + "               <Accounts Account=\"0010\" DateIn=\"2013-01-09\" Status=\"AC\"/>\n"
              + "               <Accounts Account=\"0011\" DateIn=\"2013-01-09\" Status=\"AC\"/>\n"
              + "               <Accounts Account=\"0012\" DateIn=\"2013-01-09\" Status=\"AC\"/>\n"
              + "               <Accounts Account=\"0013\" DateIn=\"2013-01-09\" Status=\"AC\"/>\n"
              + "       </BCEntry>\n"
              + "       <BCEntry BC=\"597\">\n"
              + "               <ParInfo Rn=\"45\" Id=\"109240\">\n"
              + "                       <RList RDate=\"2016-05-17\"/>\n"
              + "               </ParInfo>\n"
              + "               <Accounts Account=\"3010\" DateIn=\"2015-09-14\" Status=\"AC\"/>\n"
              + "        </BCEntry>\n"
              + "    </root>";
              System.out.println(U.<List<Map<String, Object>>>get(U.fromXmlMap(xml), "root.BCEntry.0.Accounts"));
              // [{-Account=0010, -DateIn=2013-01-09, -Status=AC, -self-closing=true},
              //  {-Account=0011, -DateIn=2013-01-09, -Status=AC, -self-closing=true},
              //  {-Account=0012, -DateIn=2013-01-09, -Status=AC, -self-closing=true},
              //  {-Account=0013, -DateIn=2013-01-09, -Status=AC, -self-closing=true}]



Хорошего вам дня!
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39978199
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan
Aleks_Aleks
Zzz79,

ок, тогда напишу на DOM и на SAX, посмотрим что тим одобрит)

на jaxb


К стати да!
К JAXB можно и SAX прикрутить, а если есть XSD файл, то оно и Java классы сможет сгенерить, а уж Unmarshaling приятнее, чем в DOM ковыряться.

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/xjc.html
https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/Unmarshaller.html
https://www.oracle.com/technical-resources/articles/javase/jaxb.html
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39978223
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kolesnikov, а ты пользовался jq?
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39978279
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Valentin Kolesnikov, а ты пользовался jq?


Это С++ библиотека вообще-то.

авторjq is like sed for JSON data - you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.

jq is written in portable C, and it has zero runtime dependencies.


Хорошего вам вечера!
...
Рейтинг: 0 / 0
Парсинг xml с массивом элементов
    #39978314
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JQ использует свой собственный диалект языка запросов к JSON документу.

Что-то вроде упрощённого XPath.

Вам это было-бы интересно?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсинг xml с массивом элементов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]