|
Народ, а как счас модно читать XML файл. | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
17.03.20
✎
19:37
|
Я хочу прочитать нативно, быстро прочитать через ЧтениеXML большой файл.
Он, допустим имеет такую структуру Products Product Categories Category Category Product Categories Category Category Product и Category как бы тоже содержат поля (без атрибутов). Вот как это хозяйство правильно прочитать? А то я написал универсальную читалку, читает на клиенте. Но вдруг это изобретение велосипедов, как правильно? |
|||
1
ДенисЧ
17.03.20
✎
19:38
|
В 1с XDTO.
В SQL - штатные средства. |
|||
2
Гений 1С
гуру
17.03.20
✎
19:40
|
(1) В XDTO, говоришь? Там нужно всю схему XML валидировать? Можно пример? что-то не понимаю.
Вот пример: Products Product ProductName BigItem ProductID 1 Categories Category CategoryID 11 CategoryName Electric Category CategoryID 12 CategoryName Ware Product ProductName SmallItem ProductID 2 Categories Category CategoryID 11 CategoryName Electric |
|||
3
Гений 1С
гуру
17.03.20
✎
19:40
|
А XML по схеме XTDO уаще быстро читается? или ЧтениеXML шибче?
|
|||
4
Гений 1С
гуру
17.03.20
✎
19:41
|
И да, файл огромный. XDTO ж в память засасывает, так?
|
|||
5
ДенисЧ
17.03.20
✎
19:54
|
(3) Шибечее всего читает УдалитьФайлы().
Но тебе ведь не это надо? Я ж говорю - читай штатными средствами MSSQL. Всё равно руками - не обгонишь. |
|||
6
Cyberhawk
17.03.20
✎
20:03
|
Некоторые текстовые файлы только через ДОМ-модель сможешь прочитать.
ЧтениеХМЛ как минимум не понимает одновременно текстовые свойства и текстовое содержимое. |
|||
7
icipher
17.03.20
✎
20:07
|
Построитель = Новый ПостроительDOM;
ЧтениеХМЛ = Новый ЧтениеXML; ЧтениеХМЛ.УстановитьСтроку(Ответ); Документ = Построитель.Прочитать(ЧтениеХМЛ); ТаблицаОтчислений = Документ.ПолучитьЭлементыПоИмени("deductionsDetailed"); и т. д. |
|||
8
Гений 1С
гуру
17.03.20
✎
20:09
|
(6) Дом модель умирает на больших файлах, плавали - знаем.
|
|||
9
Cyberhawk
17.03.20
✎
20:10
|
(8) Так необязательно ею читать весь целиком
|
|||
10
Гений 1С
гуру
17.03.20
✎
20:13
|
(9) это как?
|
|||
11
Skipper
17.03.20
✎
20:39
|
(0) XDTO
|
|||
12
ProProg
17.03.20
✎
20:55
|
Обычное чтение XML в цикле
|
|||
13
Гений 1С
гуру
17.03.20
✎
20:58
|
(12) вот придется код писать под каждую структуру. Я у себя формализовал. ВОт думаю, велосипед или давать в печать?
|
|||
14
ProProg
17.03.20
✎
21:07
|
не понял что значит под каждую. ты конструктор хочешь?
|
|||
15
ProProg
17.03.20
✎
21:08
|
Универсальную я уже сделал
Price Convertor: загрузка прайс-листов YML / XML в 1С https://subsystems.ru/solutions/parsery-praysov/price-convertor-zagruzka-prays-listov-yml-xml-v-1s/ |
|||
16
Garykom
гуру
17.03.20
✎
21:10
|
Прикольно что некоторые только сейчас доходят до уже устаревших технологий типа XML.
(0) Когда будешь осваивать JSON? |
|||
17
Garykom
гуру
17.03.20
✎
21:11
|
(15) Маня? Ты шо дизайн сайтика сменил?
|
|||
18
Сияющий в темноте
17.03.20
✎
21:14
|
(6) чтение xml при должных настройках все прекраснг читает.
|
|||
19
ProProg
17.03.20
✎
21:16
|
файл 500 гиг с 260 000 товарами (еще у них соти свойств) три минуты занимает
|
|||
20
Garykom
гуру
17.03.20
✎
21:17
|
(19) Питон плохо умеет параллелизм так что хня твоя читалка. Можно круче в кучу потоков.
|
|||
21
ProProg
17.03.20
✎
21:17
|
При этом там еще проблема - что группы отдельно (еще и с рекурсией) и товары отдельно с ссылками по айди.
Вот это тормознее чем само чтение. |
|||
22
ProProg
17.03.20
✎
21:18
|
(20) ты смешной. когда нет смысла ускорятся (3 минуты 500 гиг файл) - то нафига мучаться.
Пойди найди питонщика - 100 000 денег мало будет. |
|||
23
ProProg
17.03.20
✎
21:20
|
в 1С тоже есть функции потокового чтения и не поверишь даже дробления файлов.
только нафига усложнять там где оно не нужно! золотое правило - не делай много работы там где оно нафиг не нужно. |
|||
24
ProProg
17.03.20
✎
21:23
|
в файле 5000 свойств. у всех товаров они разные.
в каждого от 5 до 25 свойств. 4000 групп разных видов товаров. Твой питонщик загнется код писать. Это только 1Сник способен расколдовать и не не каждый. 3000 баксов заплатишь за программу которую он постоянно будет глюки вылавливать и править. потому что мозг не включит как все разложить. |
|||
25
mikecool
17.03.20
✎
22:04
|
(15)слово "прийдет" пишется как "придет"
|
|||
26
Кирпич
17.03.20
✎
22:25
|
+(25) 500 гиг еще на**здел
|
|||
27
Кирпич
17.03.20
✎
22:28
|
(19) у тебя там каждый товар описывается романом типа "Война и мир"?
|
|||
28
ProProg
17.03.20
✎
22:39
|
Да ошибся. 500 мегабайт.
|
|||
29
Кирпич
17.03.20
✎
22:54
|
(20) В питоне есть expat из коробки. Это, пожалуй, самый быстрый способ читать xml. А вместо потоков можно использовать процессы. Оно там по писанине мало чем отличается от потоков.
|
|||
30
Сияющий в темноте
17.03.20
✎
23:05
|
пихаиь все в один xml-файл,это как все яйца в одной корзине.
еще и самый идиотский формат,который даже простые последовательности символов не обещает сохранять. |
|||
31
ProProg
17.03.20
✎
23:07
|
(30) такое повсеместно. еще хуже коммерс ML
там в три файла распихивают но потом все эти три надо между собой в одной целое соединять - а это множественные поиски и проставления. самый быстрый и удобны как всегда CSV |
|||
32
ProProg
17.03.20
✎
23:08
|
99 процентов еще в экселях живет. и мало того в эксели картинки пихает.
|
|||
33
Lokli
18.03.20
✎
07:14
|
Есть же описание и разбор вариантов в 1С.
http://catalog.mista.ru/public/311011/ |
|||
34
Cyberhawk
18.03.20
✎
09:28
|
(18) А, ну значит это через ФабрикуХДТО такой косяк: когда есть и атрибут (то что внутри тэга), и значение (то что между открывающим и закрывающим тэгами), то значение никуда не читается (только атрибут).
|
|||
35
Арбузов
18.03.20
✎
09:32
|
(28) Даже на 500М одним файлом прайс выгружают только отморозки какие-то.
|
|||
36
ДенисЧ
18.03.20
✎
09:33
|
(35) Не отморозки, а маньяки. В основном - ростовские...
|
|||
37
Арбузов
18.03.20
✎
09:35
|
(36) Маньяки и Гении :)) И непонятно, кто из них страшнее.
|
|||
38
DrZombi
гуру
18.03.20
✎
09:54
|
(0) Файл может быть и в одну строку
|
|||
39
sikuda
18.03.20
✎
10:32
|
(0) ХМL это простой длинный текстовый файл, чтение осуществляется последовательно. А нужно
- сразу переход в нужное место - выделение необходимого куска - быстрое приведения его в структуру загрузки 1С (обычно используем XDTO) |
|||
40
ProProg
18.03.20
✎
10:44
|
1С могла бы при желании ускорить работу с XML и уростить. но по неводомым причинам не делает этого.
Разные методы по разному работают и выдают скоростные результаты. |
|||
41
ProProg
18.03.20
✎
10:46
|
Проблема на самолм деле в том что кто как хочет так и лепит XML
Сейчас все чаще попадаются YML - там хоть какая то структура есть определенная. Но до сих пор попадаются просто уродские XML в которых налеплено как попало. XML это паутинная структура, особенно когда в одном файле разные таблицы. |
|||
42
АнализДанных
18.03.20
✎
10:54
|
(2) XDTO можно читать, без схемы, но имей ввиду: если у тебя есть какой-то элемент с типом "Список", например в твоем случае это получается "Category", то
- если список из 1-го элемента, то он прочитает его, как тип ОбъектXDTO - если список из более 1-го элемента, то он прочитает его, как тип СписокXDTO. Решается простой процедурой, например: Для Каждого ЭлСпискаXDTO Из КоллекцияXDTO(CategoryXDTO) Цикл //обработка КонецЦикла Процедура КоллекцияXDTO(ОбъектXDTO) Цикл Если ТипЗнч(ОбъектXDTO)=Тип(СписокXDTO) Тогда Возврат ОбъектXDTO; Иначе МассивОбъектов = Новый Массив; МассивОбъектов.Добавить(ОбъектXDTO); Возврат МассивОбъектов; КонецЕсли; КонецПроцедуры |
|||
43
big
18.03.20
✎
10:55
|
(19) А можно взять "помучить" это файл в 500 мБ?
|
|||
44
Fragster
гуру
18.03.20
✎
10:57
|
500 мегабайт в XDTO влезет нормально. если страшно, то можно с помощью Чтение спуститься до уровня первого списка (пропустить Products) и в цикле читать Product как объектXDTO. тогда памяти сильно меньше надо будет.
|
|||
45
Garykom
гуру
18.03.20
✎
10:59
|
(39) Это все давным давно есть из коробки в нормальных фреймворках.
И в 1С есть но тормозит и жрет кучу ресурсов. |
|||
46
Garykom
гуру
18.03.20
✎
11:00
|
(44) Проще аля sax прогнать и получить на выходе Структуру с вложенными Структурами а затем работать с ними.
|
|||
47
Garykom
гуру
18.03.20
✎
11:03
|
(46) Ну или в ДеревоЗначений
https://helpf.pro/faq/view/1321.html |
|||
48
Fragster
гуру
18.03.20
✎
11:19
|
(46)(47) оно принципиально не отличается от объекта XDTO и не факт, что будет меньше памяти жрать
|
|||
49
Djelf
18.03.20
✎
11:25
|
500 метров это ерунда, реестр лицензий на 8 гигов, это более серьезный вызов http://fsrar.ru/opendata/7710747640-reestr/
|
|||
50
Fragster
гуру
18.03.20
✎
11:26
|
(49) ну смотри, там даже xsd лежит
|
|||
51
sikuda
19.03.20
✎
14:15
|
(45) Да вообще 1Сина придумала ХМLЧтение.Прочитать() кусочками. Ведь нет же нигде такого ;)))
<?php $reader = new XMLReader(); $reader->open('example.xml'); // указываем ридеру что будем парсить этот файл // циклическое чтение документа while($reader->read()) { if($reader->nodeType == XMLReader::ELEMENT) { // если находим элемент <card> if($reader->localName == 'card') { $data = array(); // считываем аттрибут number $data['number'] = $reader->getAttribute('number'); // читаем дальше для получения текстового элемента $reader->read(); if($reader->nodeType == XMLReader::TEXT) { $data['name'] = $reader->value; } // ну и запихиваем в бд, используя методы нашего адаптера к субд SomeDataBaseAdapter::insertContact($data); } } } |
|||
52
Franchiser
гуру
19.03.20
✎
15:30
|
(15) второе видео 7:12/9:57
Недельный программатор - это не д.б. число |
|||
53
Гений 1С
гуру
20.03.20
✎
21:29
|
(35) если что то я обрабатывал выгрузку всех товаров с сайта. Переносил сайт с одного движка на другой (Друпал). ;-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |