|
Преобразование XML в таблицу значений | ☑ | ||
---|---|---|---|---|
0
DanJer74
17.03.16
✎
08:56
|
Приветствую! Можно ли как-то сделать следующее: загрузить xml через фабрику xdto в таблицу значений без построчного перебора. Суть в том, что при чтении очень большое количество записей (более 200000). Хотелось бы закинуть одним махом.
|
|||
1
cw014
17.03.16
✎
09:01
|
Делаешь таблицу "ЗначениеВСтрокуВнутр". Изучаешь получившееся. Берешь свой XML в качестве строки и меняешь его под структуру "ЗначениеВСтрокуВнутр". Делаешь "ЗначениеИзСтрокиВнутр"
|
|||
2
LordCMEPTb
17.03.16
✎
09:13
|
Можно попробовать: http://its.1c.ru/db/v836doc/bookmark/dev/TI000000763
Но при чтении xml могут быть "забавные" ошибки, на которые ответа можно не найти: Ошибка с XDTO ..1998/namespace}space |
|||
3
Живой Ископаемый
17.03.16
✎
10:13
|
ТЗ тоже сериализуется. Посмотреть формат ХМЛ который получается при ее сериализации, дополнить тот хмл, который нужно загрузить таким образом, чтобы он по сути предстяавлял собой сериализацию ТЗ(это делать на уровне текста). прочитатьОбъектХДТО из полученного хмл в ТЗ одним оператором.
|
|||
4
DanJer74
17.03.16
✎
11:59
|
(3) Как посмотреть формат?
|
|||
5
DanJer74
17.03.16
✎
12:00
|
http://v8.1c.ru/8.1/data/core ValueTable
|
|||
6
DanJer74
17.03.16
✎
12:00
|
Я вот это вот нарыл, а что дальше делать - не понятно
|
|||
7
Serginio1
17.03.16
✎
12:07
|
СериализаторXDTO
|
|||
8
Serginio1
17.03.16
✎
12:10
|
Список1=Новый СписокЗначений;
Список2=Новый СписокЗначений; Список1.Добавить(Список2); Список2.Добавить(1); Список2.Добавить("1"); Список2.Добавить(Список1); //стр=XMLСтрока(Список1); ЗаписатьXML=Новый ЗаписьXML; ЗаписатьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписатьXML,список1); стр=ЗаписатьXML.Закрыть(); Сообщить(стр); ЧтениеXML=новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(стр); список=СериализаторXDTO.прочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя)); сообщить(список); |
|||
9
Serginio1
17.03.16
✎
12:12
|
Навсякий случай ЧтениеXML.ПерейтиКСодержимому()
|
|||
10
mistеr
17.03.16
✎
12:12
|
(8) Почему не на .NET?!! :)
|
|||
11
DanJer74
17.03.16
✎
12:22
|
СериализаторXDTO.ЗаписатьXML(ЗаписатьXML,список1); платформа падает
|
|||
12
Живой Ископаемый
17.03.16
✎
12:38
|
||||
13
mehfk
17.03.16
✎
12:39
|
(10) Тоже удивлен :)
|
|||
14
Живой Ископаемый
17.03.16
✎
12:40
|
||||
15
DanJer74
17.03.16
✎
12:57
|
Мне нужно СписокXDTO загнать в таблицу
|
|||
16
Живой Ископаемый
17.03.16
✎
13:00
|
сделай так, чтобы это был не список xdto а строки таблицы значения. на уровне текстового содержимого хмл-файла
|
|||
17
DanJer74
17.03.16
✎
13:02
|
Каким образом?
|
|||
18
DanJer74
17.03.16
✎
13:04
|
Вообще было бы удобней все это в регистр сведений загонять
|
|||
19
Serginio1
17.03.16
✎
13:06
|
(10) Мечтательно Вот Когда 1С будет на .Net
|
|||
20
mehfk
17.03.16
✎
13:07
|
(18) Ну тогда XML должен представлять из себя сериализованный набор записей. Если это не так (а это не так), то пиши парсер. Соответствующие средства в языке 1с есть.
|
|||
21
Живой Ископаемый
17.03.16
✎
13:09
|
2(17) Ты смотришь на тот ХМЛ который у тебя есть, и ты смотришь на хмл полученный в 12, и думаешь что тебе нужно сделать, чтобы получить из первого второй, делаешь это, и потом читаешь как в 14.
ПРОФИТ |
|||
22
Tateossian
17.03.16
✎
13:12
|
(19) Низачто. Убунта будет в пролете.
|
|||
23
Serginio1
17.03.16
✎
14:29
|
(22) .Net Core работает и на Убунте
|
|||
24
DanJer74
17.03.16
✎
14:46
|
В общем я вот до этого дошел:
НоваяСтр = ТЗ.Добавить(); НоваяСтр.Артикул = "123"; НоваяСтр.Производитель = "1123"; НоваяСтр.ПолноеНаименование = "Наимен1123"; НоваяСтр.Цена = "1123.2"; НоваяСтр = ТЗ.Добавить(); НоваяСтр.Артикул = "456"; НоваяСтр.Производитель = "1456"; НоваяСтр.ПолноеНаименование = "Наимен456"; НоваяСтр.Цена = "1123.1"; П = ВернутьТЗ(); НовыйОбъект = СериализаторXDTO.ЗаписатьXDTO(П); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл("S:\new.xml"); ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, НовыйОбъект); ЗаписьXML.Закрыть(); ЧтениеXML = Новый ЧтениеXML; ТипОбъектаXDTO=ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core","ValueTable"); ЧтениеXML.ОткрытьФайл("S:\new.xml"); ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); ОбъектXDTO.Проверить(); Сериализатор=Новый СериализаторXDTO(ФабрикаXDTO); МояТаблица=Сериализатор.ПрочитатьXDTO(ОбъектXDTO); КонецПроцедуры &НаСервере Функция ВернутьТЗ() Возврат ДанныеФормыВЗначение(ТЗ,Тип("ТаблицаЗначений")); КонецФункции Но на МояТаблица=Сериализатор.ПрочитатьXDTO(ОбъектXDTO); валится с ошибкой {Форма.Форма.Форма(145)}: Ошибка при вызове метода контекста (ПрочитатьXDTO) МойСписокЗначений2=Сериализатор.ПрочитатьXDTO(ОбъектXDTO); по причине: Ошибка преобразования данных XDTO: НачалоСвойства: {http://www.w3.org/2001/XMLSchema}anyType Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType по причине: Ошибка преобразования данных XDTO: НачалоСвойства: {http://v8.1c.ru/8.1/data/core}column Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType А запихать мне надо файл вот с такой структурой <?xml version="1.0" standalone="yes"?> <dataroot xmlns:od="urn:schemas-microsoft-com:officedata"> <Лист1><Производитель>1-56 (MARUICHI)</Производитель><Артикул>3068</Артикул><Наименование>Пыльник рулевой рейки</Наименование><Цена>272</Цена><Наличие>1</Наличие></Лист1> <Лист1><Производитель>1-56 (MARUICHI)</Производитель><Артикул>68414</Артикул><Наименование>Пыльник ШРУСа</Наименование><Цена>225</Цена><Наличие>1</Наличие></Лист1> <Лист1><Производитель>555</Производитель><Артикул>SA6171R</Артикул><Наименование>Рычаг передподвески верх прав</Наименование><Цена>1825</Цена><Наличие>2</Наличие></Лист1> </dataroot> |
|||
25
DanJer74
17.03.16
✎
14:47
|
Голова пухнет уже от всего этого
|
|||
26
Serginio1
17.03.16
✎
14:50
|
(24) Потому, что нужно внимательно читать (8)
ЧтениеXML=новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(стр); ЧтениеXML.ПерейтиКСодержимому(); список=СериализаторXDTO.прочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя)); |
|||
27
Serginio1
17.03.16
✎
14:53
|
Еще вариант
v8: Выгрузить таблицу в xml |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |