ДокументDOM.СоздатьРазыменовательПИ

Методы · CreateNSResolver

Создает адаптер для разрешения пространств имен.

Синтаксис

СоздатьРазыменовательПИ()
СоздатьРазыменовательПИ(<УзелКонтекста>)
СоздатьРазыменовательПИ(<Соответствие>)
СоздатьРазыменовательПИ(<Префикс>, <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-выражениями. Считываем только свойство результата, соответствующее его типу.

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

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

Подготовка

  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С» и не аффилирован с ней.