Загрузка из XML

Материал из GB wiki
Перейти к: навигация, поиск

Понимание процесса преобразования XML в датасет

Датасет в ГБ представляет собой, в общем случае, таблицу, некоторые поля которой могут содержать вложенные таблицы (субсеты).

XML-файл представляет собой данные иерархической структуры.

Процесс преобразования XML-данных в датасет происходит так:

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

Заголовок шаблона

Заголовок шаблона определяет только кодировку данных, другие параметры игнорируются

<?xml version="1.0" encoding="utf-8"?> 

Имя схемы

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

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

Например, если имеется файл данных

<root>
 <товары>
...
 </товары>
 <адреса>
...
 </адреса>
</root>

имя схемы должно быть либо товары, либо адреса. Имя корневого тэга по умолчанию можно изменить, вызвав SETROOTTAG.

Данные в шаблоне могут располагаться двумя способами:

  • Корневой тэг имеет имя, совпадающее с именем схемы
<?xml version="1.0" encoding="Windows-1251"?> 
<Товар>
 <xml2ds>
  • Корневой тэг имеет имя root, его непосредственные потомки имеют имя, совпадающее с именем схемы
<?xml version="1.0" encoding="Windows-1251"?> 
<root>
 <Товар>
  <xml2ds>

При такой структуре можно иметь в одном шаблоне сразу несколько схем с разными именами. Если задано несколько схем с одним именем, они будут обработаны все.

Тэгов xml2ds также может быть несколько - например, они могут описывать разные схемы для разных фильтров. При преобразовании они также будут обработаны все.

Имя целевого тэга

Имя целевого тэга определяет местонахождение тэга, из которого будут браться данные, и задается тэгом object, который должен находиться непосредственно внутри описания схемы:

<object name="имя"/>

Имя тэга может иметь вид:

  • Товар - данные берутся непосредственно из тэга <Товар>, который является потомком корневого тэга
  • %child.Товар - данные берутся из тэга, который расположен где-то внутри тэга <Товар>, на любой глубине

Структура датасета

Описание структуры датасета задается тэгом structure, который должен находиться непосредственно внутри описания схемы. Каждого поле датасета описывается тэгом field, каждый субсет тэгом subset Для каждого поля необходимо задать имя (атрибут name) и тип (атрибут type). Возможные значения типа поля:

  • I4 - длинное целое
  • I2 - короткое целое
  • F8 - число с плавающей точкой
  • D8 - дата и время
  • SXX - строка длиной XX (не длиннее 250 символов)
  • B - блоб (строка любой длины)

Кроме того, для поля можно задать подпись (атрибут label) и сущность (атрибут nature) Для субсетов задается только имя (name).

Пример шаблона для датасета товаров с субсетом штрихкодов:

<structure>
 <field name="Id" type="I4" label="Код" nature="fmId+otArticuls" />
 <field name="Name" type="S40" label="Название" nature="fmName" />
 <subset name="BarCodes">
  <field name="BarCode" type="S20" label="Штрих-код" />
 </subset>
</structure>