РазыменовательПространствИменDOM

Типы · DOMNamespaceResolver

Объект, разыменовывающий URI пространства имен по префиксу.

Полное описание, параметры и ограничения

РазыменовательПространствИменDOM (DOMNamespaceResolver)

РазыменовательПространствИменDOM (DOMNamespaceResolver)

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

Методы:
НайтиURIПространстваИмен (LookupNamespaceURI)

Конструкторы:
Для конкретного URI пространства имен
На основании соответствия
На основании узла DOM

Описание:

Объект, разыменовывающий URI пространства имен по префиксу.

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

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

См. также:
ДокументDOM, метод СоздатьРазыменовательПИ
ДокументDOM, метод СоздатьВыражениеXPath
ДокументDOM, метод ВычислитьВыражениеXPath

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

Доступен, начиная с версии 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С» и не аффилирован с ней.