ЗаписьXML.ЗаписатьСоответствиеПространстваИмен

Методы · WriteNamespaceMapping

Записывает соответствие префикса и URI пространства имен. Данный метод должен вызываться после обращения к методу ЗаписьXML.ЗаписатьНачалоЭлемента и до записи вложенных элементов и текста элемента. Соответствие действует в рамках текущего элемента и всех вложенных.

Синтаксис

ЗаписатьСоответствиеПространстваИмен(<Префикс>, <URIПространстваИмен>)

Примеры платформы

Запись.ЗаписатьНачалоЭлемента("apple");
Запись.ЗаписатьСоответствиеПространстваИмен("nsp", "http://metrics.org");
Запись.ЗаписатьАтрибут("weight", "http://metrics.org", "12.5");
Запись.ЗаписатьКонецЭлемента();
Полное описание, параметры и ограничения

ЗаписьXML.ЗаписатьСоответствиеПространстваИмен (XMLWriter.WriteNamespaceMapping)

ЗаписьXML (XMLWriter)

ЗаписатьСоответствиеПространстваИмен (WriteNamespaceMapping)

Доступен, начиная с версии 8.1.

Синтаксис:
ЗаписатьСоответствиеПространстваИмен(<Префикс>, <URIПространстваИмен>)
Параметры:

<Префикс> (обязательный)
Тип: Строка.
Префикс имени.

<URIПространстваИмен> (обязательный)
Тип: Строка.
URI пространства имен, для которого устанавливается соответствующий префикс.
Описание:

Записывает соответствие префикса и URI пространства имен. Данный метод должен вызываться после обращения к методу ЗаписьXML.ЗаписатьНачалоЭлемента и до записи вложенных элементов и текста элемента. Соответствие действует в рамках текущего элемента и всех вложенных.

Доступность:

Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Пример:

Запись.ЗаписатьНачалоЭлемента("apple");
Запись.ЗаписатьСоответствиеПространстваИмен("nsp", "http://metrics.org");
Запись.ЗаписатьАтрибут("weight", "http://metrics.org", "12.5");
Запись.ЗаписатьКонецЭлемента();

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Записать и прочитать XML с пространством имён

Префикс p — сокращение, URI urn:amadesk:products — настоящее имя пространства. Для поиска проверяем URI и локальное имя.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Серверный контекст, документ формируется в памяти.

  2. URI здесь — идентификатор учебного формата, а не адрес, на который будет выполнен сетевой запрос.

URI = "urn:amadesk:products";
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Попытка
    Запись.ЗаписатьНачалоЭлемента("p:product");
    Запись.ЗаписатьСоответствиеПространстваИмен("p", URI);
    Запись.ЗаписатьАтрибут("code", "A-01");
    Запись.ЗаписатьАтрибут("p:status", "active");
    Сообщить(Запись.НайтиПрефикс(URI));
    Запись.ЗаписатьНачалоЭлемента("p:name");
    Запись.ЗаписатьТекст("Книга");
    Запись.ЗаписатьКонецЭлемента();
    Запись.ЗаписатьКонецЭлемента();
    ТекстXML = Запись.Закрыть();
Исключение
    Запись.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(ТекстXML);
Попытка
    Пока Чтение.Прочитать() Цикл
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента
                И Чтение.URIПространстваИмен = URI
                И Чтение.ЛокальноеИмя = "product" Тогда
            Сообщить(Чтение.Имя);
            Сообщить(Чтение.Префикс);
            Сообщить(Чтение.ЗначениеАтрибута("status", URI));
            Для Номер = 0 По Чтение.КоличествоАтрибутов() - 1 Цикл
                Сообщить(Чтение.ЛокальноеИмяАтрибута(Номер));
                Сообщить(Чтение.URIПространстваИменАтрибута(Номер));
                Сообщить(Чтение.ПрефиксАтрибута(Номер));
                Сообщить(Чтение.ТипАтрибута(Номер));
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();

Разбор по шагам

  1. Создаём имя p:product и объявляем соответствие префикса p пространству URI.

  2. Непрефиксный code не принадлежит этому пространству; p:status принадлежит.

  3. При чтении сравниваем ЛокальноеИмя и URIПространстваИмен, не только текст p:product.

  4. Для атрибутов смотрим локальное имя, URI и префикс по индексу.

Как проверить результат

  1. НайтиПрефикс выдаёт p; значение атрибута status в заданном URI — active.

  2. Согласованно замените префикс p на item при записи: проверка по URI и локальному имени продолжит находить товар.

Ожидаемый результат

Товар найден независимо от выбранного сокращения пространства имён.

На что обратить внимание

  1. Порядок аргументов ЗначениеАтрибута здесь: локальное имя, URI. У DOM аналогичный метод может принимать URI раньше имени.

  2. Пространство по умолчанию для элементов не распространяется автоматически на непрефиксные атрибуты.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Записать пространство имён и проверить его URI

Префикс g связан с собственным URN. Читатель различает локальное имя и URI, а не считает префикс частью бизнес-данных.

Где и как запускать

Полный серверный общий модуль собственной учебной базы; не тонкий клиент.

Подготовка

  1. В своей учебной базе 8.5.1.1343 создайте серверный общий модуль УчебнаяЗаписьXML. Вставьте полный модуль одного урока и вызовите УчебнаяЗаписьXML.ВыполнитьПример() из собственной серверной команды.

  2. Все тексты и товары заданы константами: Книга, A&B, количество 3. Учётные данные, файлы организации, HTTP и внешние XML не используются.

  3. Первые шесть уроков работают только со строками/потоком в памяти. Последний создаёт один новый временный XML в собственной учебной базе; имя выводится, файл оставляется для ручной проверки.

  4. Для урока файла имя конфигурации должно быть УчебнаяКонфигурацияСинтаксиса. Существующий файл не перезаписывается. После проверки удалите вручную только показанный собственный временный файл.

  5. ПараметрыЗаписиXML неизменяемы после создания. Все пять параметров задаются конструктором, а не присваиванием свойств.

Процедура ВыполнитьПример() Экспорт
    URI = "urn:guide:owned-goods";
    Запись = Новый ЗаписьXML;
    Запись.УстановитьСтроку();
    Попытка
        Запись.ЗаписатьНачалоЭлемента("g:catalog");
        Запись.ЗаписатьСоответствиеПространстваИмен("g", URI);
        Контекст = Запись.КонтекстПространствИмен;
        Сообщить(Контекст.НайтиURIПространстваИмен("g") = URI);
        Сообщить(Контекст.НайтиПрефикс(URI) = "g");
        Запись.ЗаписатьНачалоЭлемента("product", URI);
        Запись.ЗаписатьАтрибут("code", "A&B");
        Запись.ЗаписатьАтрибут("quantity", "3");
        Запись.ЗаписатьТекст("Книга");
        Запись.ЗаписатьКонецЭлемента();
        Запись.ЗаписатьКонецЭлемента();
        XML = Запись.Закрыть();
    Исключение
        Запись.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Товар = ПрочитатьУчебныйТовар(XML);
    Сообщить(Товар.Корень = "catalog");
    Сообщить(Товар.Код = "A&B");
    Сообщить(Товар.Текст = "Книга");
    Чтение = Новый ЧтениеXML;
    Попытка
        Чтение.УстановитьСтроку(XML);
        Чтение.ПерейтиКСодержимому();
        Сообщить(Чтение.URIПространстваИмен = URI);
    Исключение
        Чтение.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Чтение.Закрыть();
КонецПроцедуры

Функция ПрочитатьУчебныйТовар(XML)
    Чтение = Новый ЧтениеXML;
    Результат = Новый Структура("Корень,Код,Количество,Текст", "", "", "", "");
    ВТоваре = Ложь;
    Попытка
        Чтение.УстановитьСтроку(XML);
        Пока Чтение.Прочитать() Цикл
            Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
                Если ПустаяСтрока(Результат.Корень) Тогда
                    Результат.Корень = Чтение.ЛокальноеИмя;
                КонецЕсли;
                Если Чтение.ЛокальноеИмя = "product" Тогда
                    ВТоваре = Истина;
                    Результат.Код = Чтение.ПолучитьАтрибут("code");
                    Результат.Количество = Чтение.ПолучитьАтрибут("quantity");
                КонецЕсли;
            ИначеЕсли ВТоваре И (Чтение.ТипУзла = ТипУзлаXML.Текст
                ИЛИ Чтение.ТипУзла = ТипУзлаXML.СекцияCDATA) Тогда
                Результат.Текст = Результат.Текст + Чтение.Значение;
            ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента
                И Чтение.ЛокальноеИмя = "product" Тогда
                ВТоваре = Ложь;
            КонецЕсли;
        КонецЦикла;
    Исключение
        Чтение.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Чтение.Закрыть();
    Возврат Результат;
КонецФункции

Разбор по шагам

  1. Открыть g:catalog и записать соответствие префикса g своему URN в текущем элементе.

  2. Получить настоящую КонтекстПространствИмен из писателя. Проверить обе стороны соответствия.

  3. Дочерний product записать через вариант локальное имя/URI; обычные code и quantity остаются атрибутами без пространства имён.

  4. Сравнить бизнес-данные и отдельно прочитать URI корня. URN не является адресом для загрузки файла или HTTP-запроса.

Как проверить результат

  1. Шесть проверок дают Истина.

  2. Корень имеет локальное имя catalog и URI urn:guide:owned-goods.

Ожидаемый результат

Полный пример согласованного объявления и использования пространства имён.

На что обратить внимание

  1. Не используйте префикс без объявления соответствия на текущем/родительском элементе.

  2. Пространство имён элемента по умолчанию не делает обычный атрибут code одноимённым атрибутом другого URI.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.