Объект, разыменовывающий URI пространства имен по префиксу.
Полное описание, параметры и ограничения
РазыменовательПространствИменDOM (DOMNamespaceResolver)
РазыменовательПространствИменDOM (DOMNamespaceResolver)
Доступен, начиная с версии 8.1.
Методы:
НайтиURIПространстваИмен (LookupNamespaceURI)
Конструкторы:
Для конкретного URI пространства имен
На основании соответствия
На основании узла DOM
Описание:
Объект, разыменовывающий URI пространства имен по префиксу.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
См. также:
ДокументDOM, метод СоздатьРазыменовательПИ
ДокументDOM, метод СоздатьВыражениеXPath
ДокументDOM, метод ВычислитьВыражениеXPath
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Найти XML-товар XPath с другим префиксом того же пространства имён
В документе префикс g, в запросе — x. Они могут отличаться, если оба связаны с одним URI; поиск без пространства имён не совпадает.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.
Сначала оставьте учебные имена и значения неизменёнными. После контрольного запуска меняйте по одному условию.
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);Разбор по шагам
URI urn:guide:products — идентификатор пространства имён, не URL для скачивания. Документ не отправляет запросов.
При создании каждого элемента указываем URI и квалифицированное имя. Атрибут code в этом примере без пространства имён.
Разыменователь связывает префикс XPath x с тем же URI, что у элементов с префиксом g.
Три конструктора создают разыменователь по карте, паре префикс/URI и существующему узлу. Без префикса XPath ищет элементы без пространства имён, которых здесь нет.
Как проверить результат
Префикс элемента g, локальное имя product, URI заданный; проверки трёх разыменователей Истина.
Запрос с x находит один товар Книга, хотя исходный элемент называется g:product.
Запрос без пространства имён даёт снимок размера 0, не первый попавшийся product.
Ожидаемый результат
Показано разрешение пространств имён XPath без привязки к буквальному префиксу исходного XML.
На что обратить внимание
Одинаковое локальное имя в разных URI означает разные расширенные имена.
Не удаляйте namespace из внешнего XML только ради удобства поиска: это изменяет контракт.
Префикс xml зарезервирован; учебные g/x не следует произвольно заменять им.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.