Порядок работы с XML в скриптах

Чтобы представить себе, какие именно данные передаются модулю Reports из Digitals в случае создания документов из обменного файла XML, попробуем заглянуть в буфер обмена. Для этого, сразу после создания документа, следует открыть любой текстовый редактор и нажать кнопку Вставка.

Примечание

В качестве редактора автор использовал NotePad++, рекомендованный одним из старожилов форума в ветке “XML против Reports”. Будучи оснащенным плугином XMLTools, этот редактор является замечательным средством для просмотра и правки документов XML.

К слову, упомянутая ветка форума, несмотря на большей частью устаревшую информацию, содержит массу примеров по извлечению данных из XML. Также здесь можно найти и скачать довольно неплохие готовые шаблоны.

Ниже на снимке экрана показано содержимое буфера обмена после форматирования в редакторе. Поскольку полный текст занял бы слишком много места, часть информации “свернута” (такие строки слева помечены + плюсами).

Прежде чем мы продолжим, сделаем небольшой экскурс в синтаксис языка XML. Если сказать совсем просто, то язык состоит из элементов (или узлов), каждый из которых состоит из открывающего тега вида <element1>, соответсвующего ему закрывающего тега вида </element1> и данных, которые заключены между ними.

Элементы могут быть вложенными друг в друга, образуя тем самым иерархическое дерево. Для удобства чтения документов на языке XML человеком, вложенные элементы принято показывать с некоторым отступом. Цепочка вложенных элементов, ведущая к неким данным, представляет собой ветку или путь.

Для работы с путями используется так называемый язык запросов XPath. Подробное его изучение его в рамках данной книги невозможно, да и не нужно. В Digitals используется упрощенная его версия, которая позволяет извлекать значение одного заданного узла, содержащего текстовое значение.

Пути бывают абсолютными, то есть от самого внешнего элемента, и относительными - от текущего. Первые обязательно начинаются с символа / (прямого слэша). Такой же прямой слэш применяется и для разделения элементов, входящих в путь. Если на некотором уровне имеется несколько элементов, то конкретный элемент можно указать по номеру в [ ] квадратных скобках.

Например:

'ProprietorInfo/Authentication/NaturalPerson/FullName/LastName'

Извлекает фамилию собственника участка.

'ProprietorInfo[1]/Authentication/NaturalPerson/FullName/LastName'

В этом случае собственников несколько, поэтому указываем номер в квадратных скобках после элемента ProprietorInfo.

Теперь вернемся к снимку экрана, показанному выше. Что же мы видим:

Таким образом, в распоряжении разработчика шаблона отчета имеется вся доступная информация - остается только ее правильно обработать. И здесь на сцену выходит язык PascalScript и функции запросов к XML.