Выгрузка в XML — различия между версиями
Bars (обсуждение | вклад) (→Каждая запись датасета - потомок некорневого тэга) |
Bars (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 17: | Строка 17: | ||
<output encoding="utf-8" xsl="/img/invoice.xsl"> | <output encoding="utf-8" xsl="/img/invoice.xsl"> | ||
− | == Имя | + | == Имя схемы == |
− | Имя | + | Имя схемы используется только для поиске в шаблоне подходящей схемы преобразования, поскольку один шаблон может содержать любое число схем. |
Данные в шаблоне могут располагаться двумя способами: | Данные в шаблоне могут располагаться двумя способами: | ||
− | * Корневой тэг имеет имя, совпадающее с именем | + | * Корневой тэг имеет имя, совпадающее с именем схемы |
<?xml version="1.0" encoding="Windows-1251"?> | <?xml version="1.0" encoding="Windows-1251"?> | ||
<Товар> | <Товар> | ||
<ds2xml> | <ds2xml> | ||
− | * Корневой тэг имеет имя root, его непосредственные потомки имеют имя, совпадающее с именем | + | * Корневой тэг имеет имя root, его непосредственные потомки имеют имя, совпадающее с именем схемы |
<?xml version="1.0" encoding="Windows-1251"?> | <?xml version="1.0" encoding="Windows-1251"?> | ||
<root> | <root> | ||
<Товар> | <Товар> | ||
<ds2xml> | <ds2xml> | ||
− | При такой структуре можно иметь в одном шаблоне сразу несколько схем | + | При такой структуре можно иметь в одном шаблоне сразу несколько схем с разными именами. Если задано несколько схем с одним именем, они будут обработаны все. |
Тэгов ds2xml также может быть несколько - например, они могут описывать разные схемы для разных фильтров. При преобразовании они также будут обработаны все. | Тэгов ds2xml также может быть несколько - например, они могут описывать разные схемы для разных фильтров. При преобразовании они также будут обработаны все. | ||
− | Например, по такому шаблону по имени | + | Например, по такому шаблону по имени схемы "Товар" для каждой записи датасета будет создано 4 тэга в XML |
<?xml version="1.0" encoding="Windows-1251"?> | <?xml version="1.0" encoding="Windows-1251"?> | ||
<root> | <root> | ||
Строка 99: | Строка 99: | ||
</Товары> | </Товары> | ||
</root> | </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> | ||
+ | |||
+ | == Сортировка и фильтрация == | ||
+ | |||
+ | Для тэгов ds2xml, а также тэгов subset с заданным fieldname, можно задать сортировку и фильтрацию. | ||
+ | |||
+ | Сортировка задается при помощи атрибута sort="выражение" или вложенного тэга <sort> выражение </sort> | ||
+ | |||
+ | Фильтрация задается при помощи атрибута filter="выражение" или вложенного тэга <filter> выражение </filter> | ||
+ | |||
+ | Сортировка и фильтрация позволяют делать самые сложные преобразования, такие как многоуровневая группировка данных. |
Текущая версия на 15:26, 14 апреля 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>
Сортировка и фильтрация
Для тэгов ds2xml, а также тэгов subset с заданным fieldname, можно задать сортировку и фильтрацию.
Сортировка задается при помощи атрибута sort="выражение" или вложенного тэга <sort> выражение </sort>
Фильтрация задается при помощи атрибута filter="выражение" или вложенного тэга <filter> выражение </filter>
Сортировка и фильтрация позволяют делать самые сложные преобразования, такие как многоуровневая группировка данных.