Создание канонической XML
Перед формированием подписи (XMLDSIG) сообщение XML должно иметь канонический вид. Канонизация XML - это приведение XML к определенному формату по строгим правилам форматирования и требованиям к содержанию. На платформе 1С создание канонической XML можно выполнить двумя способами:
Рассмотрим подробнее каждый из методов.
Минус данного метода: создание XML-сообщения с нуля.
Данный способ позволяет канонизировать как весь XML, так и его определенную часть, благодаря первому параметру метода:
Канонизировать(<УзелDOM>, <КаноническаяЗаписьВXML>, <РезультатXPath>)
Тип: АтрибутDOM,
ДокументDOM,
ЭлементDOM,
ОпределениеТипаДокументаDOM,
НотацияDOM,
СущностьDOM,
ФрагментДокументаDOM,
ТекстDOM,
КомментарийDOM,
СекцияCDATADOM,
ИнструкцияОбработкиDOM,
СсылкаНаСущностьDOM,
ПространствоИменXPath.
Узел DOM, который нужно записать в каноническом виде.
Тип: КаноническаяЗаписьXML.
Объект для записи в каноническом виде.
Тип: РезультатXPath.
Результат XPath выражения. Если задан, будет использоваться для фильтрации DOM узлов при записи. Если не задан, все узлы участвуют в записи.
Записывает
узел DOM в каноническом виде.
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение.
- Новый КаноническаяЗаписьXML;
- Новый КаноническийDOM.
Рассмотрим подробнее каждый из методов.
Каноническая запись XML
// Создает каноническое XML-сообщение
//
// Возвращаемое значение:
// Строка - XML-сообщение в каноническом виде.
//
Функция СоздатьКаноническуюXML()
КаноническаяXML = Новый КаноническаяЗаписьXML;
ТипКанонизации = ТипКаноническогоXML.ИсключающийКаноническийXMLСКомментариями;
КаноническаяXML.УстановитьСтроку(ТипКанонизации); // Запись в строку.
КаноническаяXML.ЗаписатьОбъявлениеXML();
КаноническаяXML.ЗаписатьНачалоЭлемента("envelope");
КаноническаяXML.ЗаписатьНачалоЭлемента("header");
КаноническаяXML.ЗаписатьКонецЭлемента();
КаноническаяXML.ЗаписатьНачалоЭлемента("body");
КаноническаяXML.ЗаписатьНачалоЭлемента("canonicalization");
КаноническаяXML.ЗаписатьТекст("Каноническое сообщение");
КаноническаяXML.ЗаписатьКонецЭлемента();
КаноническаяXML.ЗаписатьКонецЭлемента();
КаноническаяXML.ЗаписатьКонецЭлемента();
Возврат КаноническаяXML.Закрыть();
КонецФункции // СоздатьКаноническуюXML()
Минус данного метода: создание XML-сообщения с нуля.
Канонический DOM
// Создает каноническое XML-сообщение
//
// Возвращаемое значение:
// Строка - XML-сообщение в каноническом виде.
//
Функция СоздатьКаноническуюXML_DOM(СтрокаXML = "")
ДокументDOM = Неопределено;
Если Не ПустаяСтрока(СтрокаXML) Тогда
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
Иначе
// Создаем документ DOM.
ДокументDOM = Новый ДокументDOM("http://schemas.xmlsoap.org/soap/envelope/", "envelope");
// Далее строим документ DOM.
// ...
КонецЕсли;
КаноническаяXML = Новый КаноническаяЗаписьXML;
ТипКанонизации = ТипКаноническогоXML.ИсключающийКаноническийXMLСКомментариями;
КаноническаяXML.УстановитьСтроку(ТипКанонизации); // Запись в строку.
КаноническаяXML.ЗаписатьОбъявлениеXML();
КаноническийDOM = Новый КаноническийDOM;
КаноническийDOM.Канонизировать(ДокументDOM, КаноническаяXML);
Возврат КаноническаяXML.Закрыть();
КонецФункции // СоздатьКаноническуюXML_DOM()
Данный способ позволяет канонизировать как весь XML, так и его определенную часть, благодаря первому параметру метода:
Канонизировать(<УзелDOM>, <КаноническаяЗаписьВXML>, <РезультатXPath>)
Параметры:
<УзелDOM>
(обязательный)
Узел DOM, который нужно записать в каноническом виде.
<КаноническаяЗаписьВXML>
(обязательный)
Объект для записи в каноническом виде.
<РезультатXPath>
(необязательный)
Результат XPath выражения. Если задан, будет использоваться для фильтрации DOM узлов при записи. Если не задан, все узлы участвуют в записи.
Описание:
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение.
почему то съедает xmlns
ОтветитьУдалить