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).Значение;
КонецЦикла;
КонецЕсли;