Uses
XMLDoc, XMLIntf;
function Transform(XMLContent : string; XSLContent : string) : WideString;
var
XML : IXMLDocument;
XSL : IXMLDocument;
begin
XML := LoadXMLData(XMLContent);
XSL := LoadXMLData(XSLContent);
XML.DocumentElement.TransformNode(XSL.DocumentElement, Result)
end;
试了一下,确实好用,不过对xml文件格式的要求很严格。
- 补充:如果上面那个办法抽风了,下面有一个更严谨的方法。
uses
MSXML2_TLB;
function XMLTransform(const xmlFile: string; const xslFile: string): WideString;
var
XMLDoc, XSLDoc: IXMLDOMDocument2;
xslTemplate : IXSLTemplate;
xslProcessor : IXSLProcessor;
begin
XMLDoc := CoDOMDocument40.Create;
XMLDoc.async := False;
XMLDoc.load(xmlFile);
XSLDoc := CoFreeThreadedDOMDocument40.Create;
XSLDoc.async := False;
XSLDoc.load(xslFile);
xslTemplate := CoXSLTemplate40.Create;
xslTemplate.stylesheet := XSLDoc;
xslProcessor := xslTemplate.createProcessor;
xslProcessor.input := XMLDoc;
xslProcessor.transform;
result := xslProcessor.output;
end;
别问我为什么这么写,我也是找了一个下午才发现这样好用。万恶的delphi,出错的时候真想踹他一脚,如果能踹着的话。。。
- 另外有一篇详细说明:
http://blog.csdn.net/yethyeth/archive/2006/09/06/1187023.aspx
都是英文,好长,有时间再看。