Выгрузка в XML — различия между версиями

Материал из GB wiki
Перейти к: навигация, поиск
(Каждая запись датасета - потомок некорневого тэга)
(Каждая запись датасета - потомок некорневого тэга)
Строка 99: Строка 99:
 
  </Товары>
 
  </Товары>
 
  </root>
 
  </root>
 +
 +
Корневой тэг в этом случае, как и в предыдущем, можно переименовать. Кроме того, поскольку мы точно знаем, что в этом случае потомок корневого тэга только один, мы можем и удалить корневой тэг функцией [[REMOVEROOTTAG]]

Версия 11:25, 7 апреля 2010

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

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

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

Процесс преобразования датасета в XML заключается в сопоставлении записям и полям датасета тэгов и атрибутов XML.

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

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

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

Если нужно, чтобы кодировка полученного файла отличалась от используемой в шаблоне, нужно явно указать ее при помощи тэга output. Также при помощи этого тэга можно подключить к результату файл стилей

<?xml version="1.0" encoding="Windows-1251"?> 
<root>
 <output encoding="utf-8" xsl="/img/invoice.xsl">

Имя объекта

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

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

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

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

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

Например, по такому шаблону по имени объекта "Товар" для каждой записи датасета будет создано 4 тэга в XML

<?xml version="1.0" encoding="Windows-1251"?> 
<root>
<Товар>
 <ds2xml line="aaa">  <attr tagname="Id" value="Id"/>  </ds2xml>
 <ds2xml line="bbb">  <attr tagname="Id" value="Id"/>  </ds2xml>
</Товар>
<Товар>
 <ds2xml line="ccc">  <attr tagname="Id" value="Id"/>  </ds2xml>
 <ds2xml line="ddd">  <attr tagname="Id" value="Id"/>  </ds2xml>
</Товар>
</root>


Уровни данных

Каждая запись датасета - потомок корневого тэга

Самый простой вариант.

<?xml version="1.0" encoding="Windows-1251"?> 
<Товар>
 <ds2xml line="Товар">
  <attr tagname="Id" value="Id"/>
 </ds2xml>
</Товар>

Будет получен XML такого вида:

<?xml version="1.0" encoding="Windows-1251"?>
<root>
<Товар Id="873"/>
<Товар Id="874"/>
</root>

Название корневого тэга можно изменить, вызвав перед DS2XML функцию SETROOTTAG

Каждая запись датасета - потомок некорневого тэга

В данном случае требуется создать нужную вложенность при помощи тэгов subset, указав в последнем из них fieldname="$$ALL$$"

Шаблон

<?xml version="1.0" encoding="Windows-1251"?> 
<Товар>
 <ds2xml>  
  <subset line="Товары">
   <subset line="Данные" fieldname="$$ALL$$">
    <subset line="Товар">
     <attr tagname="Id" value="Id"/>  
    </subset>
   </subset>
  </subset>
 </ds2xml>
</Товар>

Даст нам в итоге

<?xml version="1.0" encoding="Windows-1251"?>
<root>
<Товары>
 <Данные>
  <Товар Id="873"/>
  <Товар Id="874"/>
 </Данные>
</Товары>
</root>

Корневой тэг в этом случае, как и в предыдущем, можно переименовать. Кроме того, поскольку мы точно знаем, что в этом случае потомок корневого тэга только один, мы можем и удалить корневой тэг функцией REMOVEROOTTAG