Скомпилированное выражение XPath.
Полное описание, параметры и ограничения
ВыражениеXPath (XPathExpression)
ВыражениеXPath (XPathExpression)
Доступен, начиная с версии 8.1.
Методы:
Вычислить (Evaluate)
Описание:
Скомпилированное выражение XPath.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
См. также:
ДокументDOM, метод СоздатьВыражениеXPath
Использование в версии:
Доступен, начиная с версии 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 без проверки: учебные выражения фиксированы.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.