Импорт XML (XPath)

Выполняет импорт данных из XML файла в таблицу значений, извлечение данных происходит запросами XPath.
Для использования необходимо отредактировать структуру выражений XPath, в которой:
  • Ключ - имя Xml элемента;
  • Значение - адрес Xml элемента.
Для примера приведен пример запроса(структуры) получающего зависимости задачи из файл MS Project

Важно:
  1. Порядок элементов в структуре должен соответствовать порядку XML элементов в файле.
  2. В фале XML не должен быть продекларирован элемент XMLST

Выражение на встроенном языке

xmlDoc = Новый COMОбъект("Msxml2.DOMDocument");

xmlDoc.async = false;

xmlDoc.resolveExternals = false;

xmlDoc.load(Параметры.ИмяФайла);

xmlDoc.setProperty("SelectionLanguage", "XPath");

 

Результат = Новый  ТаблицаЗначений;

 

Если  xmlDoc.parseError.errorCode <> 0 тогда

    myError = xmlDoc.parseError;

    Сообщить("You have error " + myError.reason);

Иначе

    //ЗАПОЛНИТЕ ЭТУ СТРУКТУРУ

 

    Структура = Новый Структура;

    Структура.Вставить("UID","/Project/Tasks/Task/PredecessorLink/parent::*/UID");

    Структура.Вставить("PredecessorUID","/Project/Tasks/Task/PredecessorLink/PredecessorUID");

    Структура.Вставить("Type","/Project/Tasks/Task/PredecessorLink/Type");

   Структура.Вставить("LinkLag","/Project/Tasks/Task/PredecessorLink/LinkLag");

 

    СтрЗапроса = "";

    Для Каждого Элемент из Структура цикл

        СтрЗапроса  = СтрЗапроса +"|"+ Элемент.Значение;

    КонецЦикла;

    СтрЗапроса = Сред(СтрЗапроса,2);

    objNodeList = xmlDoc.documentElement.selectNodes(СтрЗапроса);

    Если objNodeList.length > 0 Тогда

        СписокОжТэгов = Новый СписокЗначений();

        Для Каждого Элемент Из Структура Цикл

            Колонка = Результат.Колонки.Добавить(Элемент.Ключ);

            СписокОжТэгов.Добавить(Элемент.Ключ);

        КонецЦикла;

        Для Каждого Элемент Из Структура Цикл

            СписокОжТэгов.Добавить(Элемент.Ключ);

            ПервыйТэг = Элемент.Ключ;

            Прервать;  //для зациивания ожидаемых тэгов

        КонецЦикла;

        ОжидТэг = "";

        НоваяСтрока = Неопределено;

        Для Каждого objNode ИЗ objNodeList Цикл

            Если Не ОжидТэг = objNode.tagName ИЛИ objNode.tagName = ПервыйТэг Тогда

                //добавляем строку и копируем предыдущие значения

                Скопировать = Ложь;

                Если Не НоваяСтрока = Неопределено Тогда

                    //проставим пустые значения

                 Пока Не ОжидТэг = ПервыйТэг Цикл

                    НоваяСтрока[ОжидТэг] = "";

                    ОжидТэг = СписокОжТэгов.Получить(СписокОжТэгов.Индекс(СписокОжТэгов.НайтиПоЗначению(ОжидТэг))+1).Значение;

                КонецЦикла;

                ЗаполнитьЗначенияСвойств(Структура,НоваяСтрока);

                Скопировать = Истина;

            КонецЕсли;

            НоваяСтрока = Результат.Добавить();

            Если Скопировать Тогда

                ЗаполнитьЗначенияСвойств(НоваяСтрока,Структура);

            КонецЕсли;

            СписокКолонок = "";

        КонецЕсли;

        НоваяСтрока[objNode.tagName] = objNode.Text;

        //опредяляем ожидаемый тэг

        ОжидТэг = СписокОжТэгов.Получить(СписокОжТэгов.Индекс(СписокОжТэгов.НайтиПоЗначению(objNode.tagName))+1).Значение;

    КонецЦикла;

КонецЕсли;


Показывать 1 элементов
Имя параметраУстанавливается в диалогеТипНазаначение
Сортировать 
 
Сортировать 
 
Сортировать 
 
Сортировать 
 
Имя параметраУстанавливается в диалогеТипНазаначение
ИмяФайла  Строка Путь к файлу XML 
Показывать 1 элементов
Comments