Выгрузка в XML — различия между версиями
Bars (обсуждение | вклад) |
Bars (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 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> |
Текущая версия на 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>
Сортировка и фильтрация позволяют делать самые сложные преобразования, такие как многоуровневая группировка данных.