Создает адаптер для разрешения пространств имен.
Синтаксис
СоздатьРазыменовательПИ()СоздатьРазыменовательПИ(<УзелКонтекста>)СоздатьРазыменовательПИ(<Соответствие>)СоздатьРазыменовательПИ(<Префикс>, <URIПространстваИмен>)Полное описание, параметры и ограничения
ДокументDOM.СоздатьРазыменовательПИ (DOMDocument.CreateNSResolver)
ДокументDOM (DOMDocument)
СоздатьРазыменовательПИ (CreateNSResolver)
Доступен, начиная с версии 8.1.
Вариант синтаксиса: На основе документа DOM
Синтаксис:
СоздатьРазыменовательПИ()
Описание варианта метода:
Разрешение пространств имен выполняется по всем пространствам имен, определенным в документе. В случае совпадения префиксов пространств имен используется то пространство имен, которое определено раньше.
Вариант синтаксиса: На основании узла DOM
Синтаксис:
СоздатьРазыменовательПИ(<УзелКонтекста>)
Параметры:
<УзелКонтекста> (обязательный)
Тип: АтрибутDOM, ДокументDOM, ЭлементDOM, ОпределениеТипаДокументаDOM, НотацияDOM, СущностьDOM, ФрагментДокументаDOM, ТекстDOM, КомментарийDOM, СекцияCDATADOM, ИнструкцияОбработкиDOM, СсылкаНаСущностьDOM, ПространствоИменXPath.
Узел документа DOM, который будет использоваться в качестве контекста, для разрешения пространств имен.
Описание варианта метода:
Разрешение пространств имен выполняется в контексте данного узла, т.е. в разрешении используются пространства имен данного узла и его родительских узлов.
Вариант синтаксиса: На основании Соответствия
Синтаксис:
СоздатьРазыменовательПИ(<Соответствие>)
Параметры:
<Соответствие> (обязательный)
Тип: Соответствие.
Ключом соответствия выступает префикс пространства имен, а значением - URI пространства имен.
Описание варианта метода:
Создает адаптер для разрешения пространств имен на основании Соответствие.
Вариант синтаксиса: На основании конкретного префикса и URI пространства имен
Синтаксис:
СоздатьРазыменовательПИ(<Префикс>, <URIПространстваИмен>)
Параметры:
<Префикс> (обязательный)
Тип: Строка.
Префикс.
<URIПространстваИмен> (обязательный)
Тип: Строка.
URI пространства имен.
Возвращаемое значение:
Тип: РазыменовательПространствИменDOM.
Описание:
Создает адаптер для разрешения пространств имен.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Отобрать товары XPath и получить число, строку и набор узлов
Один документ исследуем разными XPath-выражениями. Считываем только свойство результата, соответствующее его типу.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.
Сначала оставьте учебные имена и значения неизменёнными. После контрольного запуска меняйте по одному условию.
Документ = Новый ДокументDOM("", "products");
Корень = Документ.ЭлементДокумента;
Для Номер = 1 По 2 Цикл
Товар = Документ.СоздатьЭлемент("product");
Товар.УстановитьАтрибут("code", ?(Номер = 1, "A-01", "B-02"));
Товар.ДобавитьДочерний(Документ.СоздатьТекстовыйУзел(?(Номер = 1, "Книга", "Ручка")));
Корень.ДобавитьДочерний(Товар);
КонецЦикла;
Разыменователь = Документ.СоздатьРазыменовательПИ();
Количество = Документ.ВычислитьВыражениеXPath("count(/products/product)", Документ,
Разыменователь, ТипРезультатаDOMXPath.Число);
Сообщить(Количество.ЧисловоеЗначение = 2);
Название = Документ.ВычислитьВыражениеXPath("string(/products/product[@code='A-01'])", Документ,
Разыменователь, ТипРезультатаDOMXPath.Строка);
Сообщить(Название.СтроковоеЗначение = "Книга");
ЕстьТовар = Документ.ВычислитьВыражениеXPath("boolean(/products/product[@code='B-02'])", Документ,
Разыменователь, ТипРезультатаDOMXPath.Булево);
Сообщить(ЕстьТовар.БулевоЗначение);
Первый = Документ.ВычислитьВыражениеXPath("/products/product", Документ,
Разыменователь, ТипРезультатаDOMXPath.ПервыйУпорядоченныйУзел);
Узел = Первый.ОдиночныйУзелЗначение;
Если Узел <> Неопределено Тогда
Сообщить(Узел.ПолучитьАтрибут("code") = "A-01");
КонецЕсли;
Выражение = Документ.СоздатьВыражениеXPath("/products/product", Разыменователь);
Снимок = Выражение.Вычислить(Документ, ТипРезультатаDOMXPath.УпорядоченныйСнимокУзлов);
Сообщить(Снимок.ТипРезультата);
Сообщить(Снимок.РазмерСнимка = 2);
Для Индекс = 0 По Снимок.РазмерСнимка - 1 Цикл
Сообщить(Снимок.ЭлементСнимка(Индекс).ПолучитьАтрибут("code"));
КонецЦикла;
Итератор = Документ.ВычислитьВыражениеXPath("/products/product", Документ,
Разыменователь, ТипРезультатаDOMXPath.УпорядоченныйИтераторУзлов);
Сообщить(Не Итератор.НеверноеСостояниеИтератора);
Узел = Итератор.ПолучитьСледующий();
Пройдено = 0;
Пока Узел <> Неопределено Цикл
Пройдено = Пройдено + 1;
Узел = Итератор.ПолучитьСледующий();
КонецЦикла;
Сообщить(Пройдено = 2);Разбор по шагам
Числовой результат count читаем через ЧисловоеЗначение, string — через СтроковоеЗначение, boolean — через БулевоЗначение.
Результат первого упорядоченного узла может быть пустым; перед ПолучитьАтрибут проверяем его.
СоздатьВыражениеXPath создаёт выражение, которое затем вычисляем в контексте документа. Снимок имеет размер и индексы с 0.
Итератор читаем ПолучитьСледующий до Неопределено. В ходе обхода документ не меняем, чтобы не сделать итератор недействительным.
Как проверить результат
count=2, строка Книга, существование B-02 — Истина.
Первый узел имеет код A-01; снимок показывает A-01 и B-02 в документном порядке.
Итератор действителен и проходит ровно два узла.
Измените предикат на отсутствующий код в отдельной копии: одиночный узел пуст, его атрибут не читается.
Ожидаемый результат
Освоены разные типы результатов XPath на одном проверяемом дереве товаров.
На что обратить внимание
Нельзя обращаться к ЧисловоеЗначение у результата-снимка только потому, что нужен размер: используйте РазмерСнимка.
Упорядоченный итератор становится недействительным при изменении документа. Снимок имеет другие правила.
Этот документ без пространства имён. Для XML с namespace нужны согласованные префиксы XPath и разыменователь.
Не вставляйте произвольный пользовательский текст в XPath без проверки: учебные выражения фиксированы.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.