Чтобы представить себе, какие именно данные передаются модулю 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
.
Теперь вернемся к снимку экрана, показанному выше. Что же мы видим:
Вся информация заключена в один внешний элемент самого
высокого уровня Data
.
На втором уровне находится три элемента, каждый из которых отвечает за свой “кусок” данных:
EmbeddedXML
Этот элемент предназначен для передачи “чистого”
XML файла, каким бы вы его увидели при
сохранении на диск. Пользователи, знакомые со структурой
обменного файла формата XML, сразу
узнают его по элементу
UkrainianCadastralExchangeFile
. Внутри
последнего находится абсолютно все “родные” элементы,
предусмотренные данным форматом.
Map
Этот элемент предназначен для передачи информации об исходной карте. Здесь имеется информация о слоях, параметрах, объектах и их узлах (точках).
Graphics
В дочерних узлах этого элемента указаны имена файлов,
содержащие графическую часть отчета (элемент
Graphic
), а также элемент, содержащий
таблицу смежников (элемент
Neighbours
).
Таким образом, в распоряжении разработчика шаблона отчета имеется вся доступная информация - остается только ее правильно обработать. И здесь на сцену выходит язык PascalScript и функции запросов к XML.