Хм... На чем бы попроще показать, и что-бы там все функции работы с XML были...
Ну, вот например, формирование XML для запроса информации по АлкоКоду:
Функция ЗапроситьАлкоКод(УТМ_URL, ФСРАР_ID, АлкоКод) Экспорт
XML_DOM=CreateObject("MSXML2.DOMDocument.6.0");
XML_HELPER=CreateObject("Msxml2.MXNamespaceManager.6.0");
XML_HELPER.declarePrefix("qp", "http://fsrar.ru/WEGAIS/QueryParameters");
XML_HELPER.declarePrefix("ns", "http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01");
Header = XML_DOM.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""" );
XML_DOM.appendChild(Header);
XML_ROOT = ДобавитьУзел(XML_DOM, XML_HELPER, XML_DOM, "Documents", "ns");
ДобавитьАттрибут(XML_DOM, XML_ROOT, "Version", "1.0");
ДобавитьАттрибут(XML_DOM, XML_ROOT, "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
ДобавитьАттрибут(XML_DOM, XML_ROOT, "xmlns:ns", "http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01");
ДобавитьАттрибут(XML_DOM, XML_ROOT, "xmlns:qp", "http://fsrar.ru/WEGAIS/QueryParameters");
XML_OWNER = ДобавитьУзел(XML_DOM, XML_HELPER, XML_ROOT, "Owner", "ns");
XML_FSRAR_ID = ДобавитьУзел(XML_DOM, XML_HELPER, XML_OWNER, "FSRAR_ID", "ns");
ДобавитьТекст(XML_DOM, XML_FSRAR_ID, ФСРАР_ID);
XML_DOCUMENT = ДобавитьУзел(XML_DOM, XML_HELPER, XML_ROOT, "Document", "ns");
XML_REPLYCLIENT = ДобавитьУзел(XML_DOM, XML_HELPER, XML_DOCUMENT, "QueryAP_v2", "ns");
XML_PARAMETERS = ДобавитьУзел(XML_DOM, XML_HELPER, XML_REPLYCLIENT, "Parameters", "qp");
XML_PARAMETER = ДобавитьУзел(XML_DOM, XML_HELPER, XML_PARAMETERS, "Parameter", "qp");
XML_Name = ДобавитьУзел(XML_DOM, XML_HELPER, XML_PARAMETER, "Name", "qp");
ДобавитьТекст(XML_DOM, XML_Name, "КОД");
XML_Value = ДобавитьУзел(XML_DOM, XML_HELPER, XML_PARAMETER, "Value", "qp");
ДобавитьТекст(XML_DOM, XML_Value, СокрЛП(АлкоКод));
// XML_DOM.Save("c:\Temp\Q_AP.xml"); // тут я сохранял для просмотра самого файла перед отправкой. в реали не нужно, закомментировано
RESULT_XML_DOM = ВыгрузитьDOM(XML_DOM, УТМ_URL+"opt/in/QueryAP_v2"); // это уже отправка самого файла в УТМ, функция в предыдущем посте.
// Дальше, тут обработка полученного ответа, разбор XML, формирование таблицы значений, которую вернет эта функция в процедуру для печати результата.
Эта функция использует три экспортных функции из глобального модуля, они универсальные, используются для всех функций формирования XML:
Функция ДобавитьУзел(XML_DOM, XML_HELPER, XML_NODE, Имя, Префикс) Экспорт
Если СокрЛП(Префикс) = "" Тогда
XML_CHILD = XML_DOM.createNode(1,Имя,"");
Иначе
XML_CHILD = XML_DOM.createNode(1,Префикс+":"+Имя,XML_HELPER.getURI(Префикс));
КонецЕсли;
XML_NODE.appendChild(XML_CHILD);
Возврат XML_CHILD;
КонецФункции
Процедура ДобавитьАттрибут(XML_DOM, XML_NODE, Имя, Значение) Экспорт
XML_ATTR = XML_DOM.createAttribute(Имя);
XML_ATTR.nodeValue = Значение;
XML_NODE.setAttributeNode(XML_ATTR);
КонецПроцедуры
Процедура ДобавитьТекст(XML_DOM, XML_NODE, Значение) Экспорт
Попытка
XML_TEXT = XML_DOM.createTextNode(Значение);
XML_NODE.appendChild(XML_TEXT);
Исключение
Сообщить("Ошибка: " + Значение);
КонецПопытки;
КонецПроцедуры
В общем, как-то так...
Принцип - создается объект XMLDOM, и потом с ним идет работа с использованием этих трех функций -
1. Добавляется узел. - всегда, для каждого нового узла
2. Добавляются нужные атрибуты - когда это нужно, когда есть атрибуты в этом узле. Может и не быть
3. Добавляется текстовое содержимое - тоже когда нужно. может отсутствоваить
В результате, после отработки всего этого - образуется готовая структура XML, которуюможно передать в запрос как есть или сохранить в файл.
Правка: MWWRuza, 23.01.2025 22:14