Re: Отчет из приложения с использованием XSL и XML
От: redKOT Россия  
Дата: 28.02.10 15:12
Оценка:
Здравствуйте, ywlepak, Вы писали:

Y>Суть в том что когда начали эти все идеи обсуждать с преподом дошли до того что в его советах-пожеланиях появилось много непонятных слов, высказываний ))) Насколько я понял суть такая что — необходимо Отчеты делать с помощью XSL с последующим преоьразованием его в XML и типа отчет будет в виде .html(/xml) страницы. Что в принципе удобно, можно сохранить и распечатать.


И это правильно !
Мой опыт формирования отчетов с разными генераторами, в том числе Crystal-report, привел к выводу, что связка xml+xslt очень эффективна. Она легка в освоении, реализации и переносима — не требует установки дополнительного ПО (как например гребаный Crystal-report). Да и производительность такого подхода гораздо выше чем с использованием генераторов отчетов (ИМХО).
Идея проста и состоит в следующем:
1. сочиняешь XSLT — схему преобразования xml в html.
2. каждый раз при создании отчета формируешь xml-документ, в который помещаешь все сведения, подлежащие отражению в отчете
3. применяешь XSLT к сформированному xml-документу

Третий шаг можно реализовать по-разному:
а) в xml-документе, полученном на шаге 2, делаешь ссылочку на xslt-схему и сохраняешь его в файл, который потом скармливаешь Браузеру. Неудобство в том, для отображения отчета необходимо хранить xslt схему в доступном месте, на которое указывает ссылочка в xml-документе.
b) загружаешь xslt в XslCompiledTransform. Затем применяешь её к xml-документу, сформированному на шаге 2, а полученную html страничку скармливаешь Браузеру.

Я применяю второй подход:
// 1. формирую xml-документ
XmlDocument doc = new XmlDocument();
DBManager.writeContract2Xml(doc, id);
// 2. открываю поток вывода для сохранения результата преобразования
FileStream fs = new FileStream(Environment.GetEnvironmentVariable("Temp") + "\\Contract_" + id.ToString() + ".html", FileMode.OpenOrCreate);
// 3. загружаю xslt-схему
XslCompiledTransform XslT = new XslCompiledTransform();
XslT.Load(Application.StartupPath + "\\ReportTemplate\\ContractProperty.xsl");
XslT.Transform(doc, new XsltArgumentList(), fs);

fs.Close();
// 4. скармливаю html Браузеру
Process.Start(/*"IExplore.exe", */Environment.GetEnvironmentVariable("Temp") + "\\Contract_" + id.ToString() + ".html");


Вот образец моего xml-файла с данными отчета.
А вот xslt-схема, которая формирует "отчет"
В результате XSL-преобразования получается вот такая html-страничка

Для написания XSLT-схемы следует изучить X-Path — очень мощная штука, которая пригодится для работы с xml в любом виде
Ковчег был построен любителем,
профессионалы строили Титаник
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.