прямая работа с xml через msxml-парсер даёт дополнительные бонусы по сравнению с v7plus.dll:
1. меньше глюков и проблем, больше управляемости и возможностей (v7plus.dll представляет собой лишь обёртку, которая так же в итоге обращается к парсеру msxml, но при этом имеет кучу ограничений: не все версии парсера подхватывает, не работает с комментариями и CDATA, и т.п.)
2. привычный набор свойств и методов для тех, кто уже знаком с объектной моделью msxml, и наоборот: одинесник, привыкнув к ней, уже не будет в ступоре при необходимости использования данной технологии в каком-нибудь скрипте на vbs
3. возможность выбирать версию парсера (в примере ниже выбирается версия 6)
Функция ВывестиЭлем(ТекЭлем,Знач Смещ); Рез=1; Попытка Если (ТекЭлем.nodeType=1) Тогда Сообщить(Смещ+"Элемент "+ТекЭлем.nodeName+":","!"); ИначеЕсли (ТекЭлем.nodeType=3) Тогда Сообщить(Смещ+"Текст элемента: "+ТекЭлем.nodeValue); ИначеЕсли (ТекЭлем.nodeType=4) Тогда Сообщить(Смещ+"CDATA: "+ТекЭлем.nodeValue); ИначеЕсли (ТекЭлем.nodeType=8) Тогда Сообщить(Смещ+"Комментарий: "+ТекЭлем.nodeValue,"I"); Иначе Сообщить(Смещ+"Элемент "+ТекЭлем.nodeName+":"); Сообщить(Смещ+"Тип: "+ТекЭлем.nodeType); КонецЕсли; Для ном=0 По ТекЭлем.attributes.length-1 Цикл ТекАтр=ТекЭлем.attributes(ном); Сообщить(Смещ+"Атрибут: "+ТекАтр.nodeName+", значение: "+ТекАтр.nodeValue); КонецЦикла; Исключение Рез=0; КонецПопытки; Смещ=Смещ+" "; Для ном=0 По ТекЭлем.childNodes.length-1 Цикл ДочЭлем=ТекЭлем.childNodes(ном); Рез=Рез*ВывестиЭлем(ДочЭлем,Смещ); КонецЦикла; Возврат Рез; КонецФункции //******************************************* Функция Сформировать() ИмяФайла="D:\1.xml"; Попытка ДОМ=СоздатьОбъект("MSXML2.DOMDocument.6.0"); Узел=ДОМ.CreateProcessingInstruction("xml","version=""1.0"" encoding=""windows-1251"""); Исключение Сообщить("Не удалось создать объект DOMDocument","!"); Возврат 0; КонецПопытки; ДОМ.insertBefore(Узел,); ТекЭлем=ДОМ.appendChild(ДОМ.createElement("Файл")); Текст=ДОМ.createTextNode("Здесь содержимое Файл"); ТекЭлем.appendChild(Текст); ТекЭлем.setAttribute("Атрибут_Файл_1","Здесь содержимое Атрибут_Файл_1"); Комм=ДОМ.createComment("Далее следует содержимое файла"); ТекЭлем.appendChild(Комм); ТекЭлем=ТекЭлем.appendChild(ДОМ.createElement("СодержимоеФайла")); Текст=ДОМ.createTextNode("Здесь содержимое СодержимоеФайла"); ТекЭлем.appendChild(Текст); ТекЭлем.setAttribute("Атрибут_СодержимоеФайла_1","Здесь содержимое Атрибут_СодержимоеФайла_1"); Текст=ДОМ.createCDATASection("Это секция CDATA"); ТекЭлем.appendChild(Текст); ДОМ.save(ИмяФайла); Попытка ДОМ=СоздатьОбъект("MSXML2.DOMDocument.6.0"); Исключение Сообщить("Не удалось создать объект DOMDocument","!"); Возврат 0; КонецПопытки; ДОМ.async=0; ДОМ.validateOnParse=-1; ДОМ.resolveExternals=-1; ДОМ.load(ИмяФайла); Если (ДОМ.parseError.errorCode<>0) Тогда // ошибки при проверке валидности Сообщить("При проверке валидности файла "+ИмяФайла+" выявлены ошибки!","!"); Возврат 0; КонецЕсли; Рут=ДОМ.documentElement(); Смещ=""; Рез=ВывестиЭлем(Рут,Смещ); Возврат Рез; КонецФункции