CdsXsltDm.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:2k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit CdsXsltDm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, HTTPApp, DBTables, Provider, Db,
  5.   DBClient, OleServer, xmldom, XMLIntf, msxmldom, XMLDoc, XSLProd;
  6. type
  7.   TWebModule1 = class(TWebModule)
  8.     ClientDataSet1: TClientDataSet;
  9.     DataSetProvider1: TDataSetProvider;
  10.     Table1: TTable;
  11.     XMLDom: TXMLDocument;
  12.     XSLDom: TXMLDocument;
  13.     HTMLDom: TXMLDocument;
  14.     procedure WebModule1WebActionItem1Action(Sender: TObject;
  15.       Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
  16.   private
  17.     { Private declarations }
  18.   public
  19.     { Public declarations }
  20.   end;
  21. var
  22.   WebModule1: TWebModule1;
  23. implementation
  24. uses WebReq;
  25. {$R *.DFM}
  26. procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
  27.   Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
  28. var
  29.   xslfile: string;
  30.   attr: IDOMAttr;
  31. begin
  32.   // open the client data set and load its XML in a DOM
  33.   ClientDataSet1.Open;
  34.   XmlDom.Xml.Text := ClientDataSet1.XMLData;
  35.   XmlDom.Active := True;
  36.   // load the requested xsl file
  37.   xslfile := Request.QueryFields.Values ['style'];
  38.   if xslfile = '' then
  39.     xslfile := 'customer.xsl';
  40.   xslDom.LoadFromFile ('c:websitesxsl' + xslfile);
  41.   XSLDom.Active := True;
  42.   if xslfile = 'single.xsl' then
  43.   begin
  44.     attr := xslDom.DOMDocument.createAttribute('select');
  45.     attr.value := '//ROW[@CustNo="' + Request.QueryFields.Values ['id'] + '"]';
  46.     xslDom.DOMDocument.getElementsByTagName ('xsl:apply-templates').
  47.       item[0].attributes.setNamedItem(attr);
  48.   end;
  49.   // do the transformation
  50.   HTMLDom.Active := True;
  51.   xmlDom.DocumentElement.transformNode (
  52.     xslDom.DocumentElement, HTMLDom);
  53.   Response.Content := HTMLDom.XML.Text;
  54.   // eventually save the xml (for debugging only)
  55.   if Request.QueryFields.Values ['savexml'] = 'yes' then
  56.     xmlDom.SaveToFile ('c:websitesxslcustomer.xml');
  57. end;
  58. initialization
  59.   if WebRequestHandler <> nil then
  60.     WebRequestHandler.WebModuleClass := TWebModule1;
  61. end.