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

есть 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
09.07.2020, 16:07
    #39977805
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг xml с массивом элементов
Aleks_Aleks,

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

Спс,

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

Код: 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
09.07.2020, 16:43
    #39977825
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг xml с массивом элементов
Aleks_Aleks
Как в парсере дом обойти массив

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

childNodes()
nextSibling()
или как-то так
...
Рейтинг: 0 / 0
09.07.2020, 20:38
    #39977890
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг xml с массивом элементов
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
09.07.2020, 22:18
    #39977916
Aleks_Aleks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг xml с массивом элементов
Valentin Kolesnikov,

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

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

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

на jaxb
...
Рейтинг: 0 / 0
09.07.2020, 23:35
    #39977938
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг xml с массивом элементов
Тут как-то семантически некрасиво.
Код: 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
10.07.2020, 10:45
    #39978021
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг xml с массивом элементов
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
10.07.2020, 15:37
    #39978199
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг xml с массивом элементов
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
10.07.2020, 16:42
    #39978223
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг xml с массивом элементов
Valentin Kolesnikov, а ты пользовался jq?
...
Рейтинг: 0 / 0
10.07.2020, 20:43
    #39978279
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг xml с массивом элементов
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
10.07.2020, 23:02
    #39978314
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг xml с массивом элементов
JQ использует свой собственный диалект языка запросов к JSON документу.

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

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


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