В предыдущей статье Введение в DOM или объектная модель документа было описано понятие объектной модели документа (DOM), раскрыты плюсы и минусы использования модели при разборе файлов XML, приведено сравнение с построчным последовательным разбором. Были представлены варианты выборки данных с помощью объекта 1С ДокументDOM. Теперь настало время познакомить читателей с самым, на мой взгляд, интересным способом извлечения данных из XML - при помощи языка запросов xPath (XML Path Language).
Модель DOM имеет древовидную структуру, зачастую ей проводят аналогию с организацией хранения файлов в папках, где каждый конечный узел сравнивают с файлом, нахождение которого заранее известно по пути до него через папки и подпапки. Не зря в названии языка присутствует слово "путь" (path в переводе с английского означает путь). Именно определение пути к данным лежит в основе xPath.
На вход конструкции xPath подается выражение, определяющее путь до искомых узлов, например такое "/someTag/someSubTag" (означает выборку всех элементов с именем someSubTag внутри элементов someTag, расположенных на первом уровне документа). На выходе образуется список найденных узлов. Список представляет собой коллекцию, которую можно обойти циклом и произвести манипуляции с узлами-элементами списка, например извлечь их значения.
Давайте подробнее остановимся на выражении xPath, определяющем путь, и его составных частях. Выражение состоит из так называемых шагов адресации (имен тегов), разделенных слэшем - косой чертой "/" и как уже было сказано выше - очень похоже на путь к файлу в файловой системе. Если путь начинается с "/", то это задает абсолютный путь к заданному элементу (от корня документа). Если же путь начинается с "//", то это означает произвольное (любое) количество уровней (от корня документа) перед искомым путем. Символ "*" в пути означает любой элемент, тот же символ в конце пути означает, что нужно выбрать все элементы по пути, указанному до этого символа, например "//someTag/someSubTag/*" (выбрать все элементы по пути /someTag/someSubTag, при этом расположение начала пути от корня документа не имеет значения и может начинаться на любом уровне).
Также в адресации могут использоваться квадратные скобки, которые задают более четкие критерии поиска, например "/someTag/someSubTag[1]" (первый элемент из найденных) или "/someTag/someSubTag[last()]" (последний элемент из найденных). Как видно, в квадратных скобках могут использоваться еще и специальные функции. Также в квадратных скобках могут задаваться условия на наличие у узлов атрибутов, на значение атрибутов, условия-отрицания и многое другое. Ниже приведена ссылка, по которой можно посмотреть различные варианты условий.
В 1С работа с xPath реализована через метод объекта ДокументDOM ВычислитьВыражениеXPath. Вариант синтаксиса языка 1с для работы с xPath приведен ниже:
Теперь для наглядности работы выборки xPath выражения посмотрите скриншоты ниже:
Углубиться в тему и посмотреть примеры (в т.ч. и более сложные) различных xPath выражений можно по этой ссылке.