Also, ich probiere es jetzt so:
Delphi-Quellcode:
var
doc: xmlDocPtr;
xslt: xsltStylesheetPtr;
xsltresult: xmlDocPtr;
xsltcontext: xsltTransformContextPtr;
params: ppchar;
str: WideString;
pint: PInteger;
pxmlchar: xmlCharPtr;
ppxmlchar: xmlCharPtrPtr;
begin
Result := '
';
xmlInitParser();
xmlSubstituteEntitiesDefault(1);
params :=
nil;
doc := xmlParseFile(pchar('
gruss.xml'));
// load and parse xml
xslt := xsltParseStylesheetFile(pchar('
gruss.xsl'));
// load and parse xsl
xsltcontext := xsltNewTransformContext(xslt, doc);
// create context
xsltresult := xsltApplyStylesheet(xslt, doc, Params);
// transform
if (doc <>
nil)
and (xslt <>
nil)
and
(xsltcontext <>
nil)
and (xsltresult <>
nil)
then
begin
str := '
';
pxmlchar := @str;
ppxmlchar := @pxmlchar;
New(pint);
xsltSaveResultToString(ppxmlchar, pint, xsltresult, xslt);
Dispose(pint);
// Größe wird nicht weiter benötigt
Result := str;
end;
Parser-Cleanup am Ende soll jetzt erstmal egal sein: FreeTransformContext etc. kommen später.
Es geht schon mal soweit, daß keine
AV mehr kommt. Für einen lokalen PInt einen Integer zu definieren war mir zu blöd, daher die New/Dispose Geschichte.
Problem: str ist nach xsltSaveResultToString leer. Da hab ich doch irgendwo Bockmist mit den Pointern - nur ich sehs im Moment nicht.
Kann denn keiner Helfen <- ich liebe diesen Spruch
Gruß Assertor