ЭлементDOM.УстановитьСоответствиеПространстваИмен

Методы · SetNamespaceMapping

Создает и устанавливает в элемент атрибут соответствия пространства имен.

Синтаксис

УстановитьСоответствиеПространстваИмен(<Префикс>, <URIПространстваИмен>, <Согласовать>)
УстановитьСоответствиеПространстваИмен(<URIПространстваИмен>, <Согласовать>)
Полное описание, параметры и ограничения

ЭлементDOM.УстановитьСоответствиеПространстваИмен (DOMElement.SetNamespaceMapping)

ЭлементDOM (DOMElement)

УстановитьСоответствиеПространстваИмен (SetNamespaceMapping)

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

Вариант синтаксиса: Основной

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

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

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

<Согласовать> (необязательный)
Тип: Булево.
Признак необходимости согласования префиксов дочерних элементов и атрибутов для указываемого пространства имен. Для атрибутов согласование выполняется только в случае непустого существующего префикса.
Значение по умолчанию: Ложь.
Описание варианта метода:
Если для данного префикса уже установлено соответствие пространству имен, то никаких действий производиться не будет, и будет возвращено Неопределено.
Причины вызова исключений:
указанный префикс содержит символы, недопустимые стандартом XML, соответствующим версии XML, указанной в свойстве ВерсияXML;

данный узел в режиме Только для чтения;

<Префикс> и <URIПространстваИмен> не соответствуют спецификации XML Namespaces.

Вариант синтаксиса: Автоматическое создание префикса

Синтаксис:
УстановитьСоответствиеПространстваИмен(<URIПространстваИмен>, <Согласовать>)
Параметры:

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

<Согласовать> (необязательный)
Тип: Булево.
Признак необходимости согласования префиксов дочерних элементов и атрибутов для указываемого пространства имен. Для атрибутов согласование выполняется только в случае непустого существующего префикса.
Значение по умолчанию: Ложь.
Описание варианта метода:
Префикс соответствия пространства имен будет сгенерирован автоматически. Если для данного пространства имен уже установлено соответствие, то никаких действий производиться не будет и будет возвращен соответствующий узел-атрибут.
Причины вызова исключений:
указанный URI пространства имен содержит символы, недопустимые стандартом XML, соответствующим версии XML, указанной в свойстве ВерсияXML.

данный узел в режиме Только для чтения.

Возвращаемое значение:
Тип: АтрибутDOM, Неопределено.
Возвращает - атрибут, соответствующий созданному соответствию.
Если для данного префикса уже установлено соответствие пространству имен, то никаких действий производиться не будет, и будет возвращено Неопределено.
Описание:

Создает и устанавливает в элемент атрибут соответствия пространства имен.

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

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

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

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

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

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

Найти XML-товар XPath с другим префиксом того же пространства имён

В документе префикс g, в запросе — x. Они могут отличаться, если оба связаны с одним URI; поиск без пространства имён не совпадает.

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

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

Подготовка

  1. Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.

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


URI = "urn:guide:products";
Документ = Новый ДокументDOM(URI, "g:products");
Корень = Документ.ЭлементДокумента;
Корень.УстановитьСоответствиеПространстваИмен("g", URI);
Товар = Документ.СоздатьЭлемент(URI, "g:product");
Товар.УстановитьАтрибут("code", "A-01");
Товар.ДобавитьДочерний(Документ.СоздатьТекстовыйУзел("Книга"));
Корень.ДобавитьДочерний(Товар);
Сообщить(Товар.Префикс = "g");
Сообщить(Товар.ЛокальноеИмя = "product");
Сообщить(Товар.URIПространстваИмен = URI);
Карта = Новый Соответствие;
Карта.Вставить("x", URI);
ПоКарте = Новый РазыменовательПространствИменDOM(Карта);
ПоПаре = Новый РазыменовательПространствИменDOM("x", URI);
ПоУзлу = Новый РазыменовательПространствИменDOM(Корень);
Сообщить(ПоКарте.НайтиURIПространстваИмен("x") = URI);
Сообщить(ПоПаре.НайтиURIПространстваИмен("x") = URI);
Сообщить(ПоУзлу.НайтиURIПространстваИмен("g") = URI);
Результат = Документ.ВычислитьВыражениеXPath("/x:products/x:product[@code='A-01']", Документ,
    ПоКарте, ТипРезультатаDOMXPath.УпорядоченныйСнимокУзлов);
Сообщить(Результат.РазмерСнимка = 1);
Если Результат.РазмерСнимка = 1 Тогда
    Сообщить(Результат.ЭлементСнимка(0).ТекстовоеСодержимое = "Книга");
КонецЕсли;
БезПространства = Документ.ВычислитьВыражениеXPath("/products/product", Документ,
    ПоКарте, ТипРезультатаDOMXPath.УпорядоченныйСнимокУзлов);
Сообщить(БезПространства.РазмерСнимка = 0);

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

  1. URI urn:guide:products — идентификатор пространства имён, не URL для скачивания. Документ не отправляет запросов.

  2. При создании каждого элемента указываем URI и квалифицированное имя. Атрибут code в этом примере без пространства имён.

  3. Разыменователь связывает префикс XPath x с тем же URI, что у элементов с префиксом g.

  4. Три конструктора создают разыменователь по карте, паре префикс/URI и существующему узлу. Без префикса XPath ищет элементы без пространства имён, которых здесь нет.

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

  1. Префикс элемента g, локальное имя product, URI заданный; проверки трёх разыменователей Истина.

  2. Запрос с x находит один товар Книга, хотя исходный элемент называется g:product.

  3. Запрос без пространства имён даёт снимок размера 0, не первый попавшийся product.

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

Показано разрешение пространств имён XPath без привязки к буквальному префиксу исходного XML.

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

  1. Одинаковое локальное имя в разных URI означает разные расширенные имена.

  2. Не удаляйте namespace из внешнего XML только ради удобства поиска: это изменяет контракт.

  3. Префикс xml зарезервирован; учебные g/x не следует произвольно заменять им.

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

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

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

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

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