Выгрузка в XML — различия между версиями
Bars (обсуждение | вклад) (→Каждая запись датасета - потомок некорневого тэга) |
Bars (обсуждение | вклад) |
||
Строка 101: | Строка 101: | ||
Корневой тэг в этом случае, как и в предыдущем, можно переименовать. Кроме того, поскольку мы точно знаем, что в этом случае потомок корневого тэга только один, мы можем и удалить корневой тэг функцией [[REMOVEROOTTAG]] | Корневой тэг в этом случае, как и в предыдущем, можно переименовать. Кроме того, поскольку мы точно знаем, что в этом случае потомок корневого тэга только один, мы можем и удалить корневой тэг функцией [[REMOVEROOTTAG]] | ||
+ | |||
+ | == Атрибуты и вложенные тэги == | ||
+ | |||
+ | Данные из исходного датасета могут быть представлены атрибутами (''<Товар Название="товар"/>''): | ||
+ | <attr tagname="Название" value="Articul.Name"/> | ||
+ | |||
+ | либо вложенными тэгами ''(<Товар><Название>товар</Название></Товар>''): | ||
+ | <subset line="Название"> | ||
+ | <attr text="Articul.Name"/> | ||
+ | </subset> | ||
+ | |||
+ | == Субсеты == | ||
+ | |||
+ | Если входной датасет имеет иерархическую структуру, либо есть возможность для каждой записи получить субсет запросом, то можно преобразовать этот субсет во вложенные тэги. Для этого используется конструкция '''subset fieldname="''ИмяПоля''"''' или '''subset fieldname="=''Выражение''"''' | ||
+ | |||
+ | По шаблону | ||
+ | <?xml version="1.0" encoding="Windows-1251"?> | ||
+ | <Товар> | ||
+ | <ds2xml line="Товар"> | ||
+ | <attr tagname="Id" value="Id"/> | ||
+ | <subset fieldname="=Id.BarCodes" line="barcode"> | ||
+ | <attr text="BarCode"/> | ||
+ | </subset> | ||
+ | </ds2xml> | ||
+ | </Товар> | ||
+ | |||
+ | Будет получен XML такого вида: | ||
+ | <?xml version="1.0" encoding="Windows-1251"?> | ||
+ | <root> | ||
+ | <Товар Id="873"><barcode>23131323</barcode><barcode>12313242</barcode></Товар> | ||
+ | <Товар Id="874"><barcode>123456767881</barcode><barcode>1234123412344</barcode></Товар> | ||
+ | </root> |
Версия 13:51, 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
Атрибуты и вложенные тэги
Данные из исходного датасета могут быть представлены атрибутами (<Товар Название="товар"/>):
<attr tagname="Название" value="Articul.Name"/>
либо вложенными тэгами (<Товар><Название>товар</Название></Товар>):
<subset line="Название"> <attr text="Articul.Name"/> </subset>
Субсеты
Если входной датасет имеет иерархическую структуру, либо есть возможность для каждой записи получить субсет запросом, то можно преобразовать этот субсет во вложенные тэги. Для этого используется конструкция subset fieldname="ИмяПоля" или subset fieldname="=Выражение"
По шаблону
<?xml version="1.0" encoding="Windows-1251"?> <Товар> <ds2xml line="Товар"> <attr tagname="Id" value="Id"/> <subset fieldname="=Id.BarCodes" line="barcode"> <attr text="BarCode"/> </subset> </ds2xml> </Товар>
Будет получен XML такого вида:
<?xml version="1.0" encoding="Windows-1251"?> <root> <Товар Id="873"><barcode>23131323</barcode><barcode>12313242</barcode></Товар> <Товар Id="874"><barcode>123456767881</barcode><barcode>1234123412344</barcode></Товар> </root>