|
Импорт xml файла в виде дерева значений | ☑ | ||
---|---|---|---|---|
0
sergejkonet
28.07.14
✎
09:46
|
Всем доброго времени суток! необходимо выполнить импорт дерева чертежей, представленного в виде xml-файла в справочник чертежи 1С. создал табличное поле с типом дерево значений, в табличное поле добавил необходимые столбцы, прописал следующий код на открытие файла XML.
Процедура ЗагрузитьИзЛоцманаXML_Иерархически() Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); Фильтр = "Файл данных (*.xml)|*.xml"; ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = "Выберите файл загрузки"; ДиалогОткрытияФайла.ПредварительныйПросмотр = Ложь; Если ДиалогОткрытияФайла.Выбрать() Тогда ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла; Иначе Возврат; КонецЕсли; ТаблицаЗагрузки.Строки.Очистить(); XML_Документ = Новый ЧтениеXML; XML_Документ.ОткрытьФайл(ИмяФайла); Пока XML_Документ.Прочитать() Цикл Если XML_Документ.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда //Если XML_Документ.Имя = "object" Тогда ТипЭлемента = XML_Документ.ПолучитьАтрибут("Type"); Если ТипЭлемента = "Сборочная единица" Тогда Стр = ТаблицаЗагрузки.Строки.Добавить(); //Стр.ЭтоГруппа = Истина; Стр.ID = СокрЛП(XML_Документ.ПолучитьАтрибут("Id")); Стр.Наименование = СокрЛП(XML_Документ.ПолучитьАтрибут("Name")); Стр.НомерЧертежа = СокрЛП(XML_Документ.ПолучитьАтрибут("Product")); //ПрочитатьВложенныеУровни(XML_Документ, Стр) ИначеЕсли ТипЭлемента = "Деталь" Тогда Стр = ТаблицаЗагрузки.Строки.Добавить(); //Стр.ЭтоГруппа = Ложь; Стр.ID = СокрЛП(XML_Документ.ПолучитьАтрибут("Id")); Стр.Наименование = СокрЛП(XML_Документ.ПолучитьАтрибут("Name")); Стр.НомерЧертежа = СокрЛП(XML_Документ.ПолучитьАтрибут("Product")); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры Но файл открывается в виде неранжированного списка, а как ы мне его представить в виде дерева значений? Что бы потом можно было дальше это дерево экспортировать в систему. |
|||
1
Asmody
28.07.14
✎
10:01
|
Если это дерево, то должны быть уровни где-то как-то.
В 1С у строки дерева значений тоже есть свойство Строки. |
|||
2
Asmody
28.07.14
✎
10:03
|
Если xml-файл небольшой, то его можно открыть через документ DOM, который имеет "деревянную" структуру.
|
|||
3
sergejkonet
28.07.14
✎
10:10
|
(2) Ну размер файлов колеблется от 200 до 400 кб. С уровнями в xml файле уровни есть, но никаких общих ID на этих уровнях я не прослеживаю, т.е. как перенести эти уровни в 1С?
|
|||
4
Asmody
28.07.14
✎
10:22
|
пример xml кинь. только не сюда, а на http://pastebin.com/
|
|||
5
acsent
28.07.14
✎
10:23
|
(2) Думаешь большой файл проще в дерево загнать без дома?
|
|||
6
acsent
28.07.14
✎
10:24
|
А вообще юзай XDTO - 2 строчки кода и объект с данными готов
|
|||
7
Asmody
28.07.14
✎
10:30
|
(6) для XDTO схему надо рисовать
|
|||
8
sergejkonet
28.07.14
✎
10:43
|
||||
9
sergejkonet
28.07.14
✎
10:44
|
(6)Думал про XDTO, но там надо точную схему нарисовать, а xml не из 1с((
|
|||
10
Asmody
28.07.14
✎
10:47
|
(8) там что, в значениях атрибутов правда кавычки неэкранированные, или это pastebin перевирает?
|
|||
11
sergejkonet
28.07.14
✎
10:53
|
нет, pastebin вставил все верно.
|
|||
12
sergejkonet
28.07.14
✎
10:54
|
(10) значения атрибутов там и правда в неэкранированных кавычках.
|
|||
13
Asmody
28.07.14
✎
10:56
|
(12) Я тебя "поздравляю". Чините выгрузку, с таким ни один нормальный xml-парсер работать не будет.
|
|||
14
sergejkonet
28.07.14
✎
11:08
|
(13) ну данные вроде как он извлекает, значения атрибутов Product, Name, Id. он мне выдает, но выдает в виде неранжированной таблицы.
|
|||
15
Asmody
28.07.14
✎
11:11
|
(14) так для этого тебе либо надо самому анализировать что это за узел, есть ли у него вложенные узлы, отслеживать текущий уровень вложенности, либо пользоваться DOM.
|
|||
16
sergejkonet
28.07.14
✎
11:23
|
(15) а для использования DOM необходимо навести с неэкранированными кавычками? Т.к. навести порядок с этим практически нереально, т.к. как мне сказали конструктора работающие с лоцманом, править xml загрузки нельзя, то остается только описывать вручную все уровни вложенные. в данном файле их вроде как 7, но вот привязать иерархию к какому-то ID, тут так просто и не подцепишься, поля родитель и подавну нет.
|
|||
17
Asmody
28.07.14
✎
11:43
|
(16) а ты уверен, что у тебя ПолучитьАтрибут("Name") возвращает именно
[Автоматизированная газораспределительная станция (АГРС) "Снежеть" Q=85000м3 / /ч Комплекс технологического оборудования ТУ 3647-240-05772641-01] По-идее, должен на второй кавычке обрубаться. |
|||
18
sergejkonet
28.07.14
✎
11:59
|
(17) Нет, возвращает все верно. полностью все значение атрибута Name. Попробую сейчас через DOM дерево получить.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |