ВыражениеXPath

Типы · XPathExpression

Скомпилированное выражение XPath.

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

ВыражениеXPath (XPathExpression)

ВыражениеXPath (XPathExpression)

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

Методы:
Вычислить (Evaluate)

Описание:

Скомпилированное выражение XPath.

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

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

См. также:
ДокументDOM, метод СоздатьВыражениеXPath

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

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

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

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

Отобрать товары XPath и получить число, строку и набор узлов

Один документ исследуем разными XPath-выражениями. Считываем только свойство результата, соответствующее его типу.

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

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

Подготовка

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

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


Документ = Новый Документ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);

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

  1. Числовой результат count читаем через ЧисловоеЗначение, string — через СтроковоеЗначение, boolean — через БулевоЗначение.

  2. Результат первого упорядоченного узла может быть пустым; перед ПолучитьАтрибут проверяем его.

  3. СоздатьВыражениеXPath создаёт выражение, которое затем вычисляем в контексте документа. Снимок имеет размер и индексы с 0.

  4. Итератор читаем ПолучитьСледующий до Неопределено. В ходе обхода документ не меняем, чтобы не сделать итератор недействительным.

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

  1. count=2, строка Книга, существование B-02 — Истина.

  2. Первый узел имеет код A-01; снимок показывает A-01 и B-02 в документном порядке.

  3. Итератор действителен и проходит ровно два узла.

  4. Измените предикат на отсутствующий код в отдельной копии: одиночный узел пуст, его атрибут не читается.

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

Освоены разные типы результатов XPath на одном проверяемом дереве товаров.

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

  1. Нельзя обращаться к ЧисловоеЗначение у результата-снимка только потому, что нужен размер: используйте РазмерСнимка.

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

  3. Этот документ без пространства имён. Для XML с namespace нужны согласованные префиксы XPath и разыменователь.

  4. Не вставляйте произвольный пользовательский текст в XPath без проверки: учебные выражения фиксированы.

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

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

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

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

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