The error messages from the compiler are a result of not including the
correct header files.
You should also take a look at the latest version of the Xalan C API.
There are already functions to use buffers for source tree and stylesheet
input. See the file XalanTransformer/XalanCAPI.h:
XALAN_TRANSFORMER_EXPORT_FUNCTION(int)
XalanParseSourceFromStream(
const char* theXMLStream,
unsigned long theXMLStreamLength,
XalanHandle theXalanHandle,
XalanPSHandle* thePSHandle);
XALAN_TRANSFORMER_EXPORT_FUNCTION(int)
XalanCompileStylesheetFromStream(
const char* theXSLStream,
unsigned long theXSLStreamLength,
XalanHandle theXalanHandle,
XalanCSSHandle* theCSSHandle);
XALAN_TRANSFORMER_EXPORT_FUNCTION(int)
XalanTransformToHandlerPrebuilt(
XalanPSHandle thePSHandle,
XalanCSSHandle theCSSHandle,
XalanHandle theXalanHandle,
void* theOutputHandle,
XalanOutputHandlerType theOutputHandler,
XalanFlushHandlerType theFlushHandler);
Be sure to read the comments in the header file carefully, because you'll
need to destroy the parsed source and compiled stylesheets instances once
the transformation is finished. Don't worry if you think this is less
efficient -- sources are always parsed and stylesheets are always compiled,
so there's no loss of efficiency if you do it yourself in your code.
You may need to get the latest source code from CVS. You can also wait
until we finish the 1.3 release, which ought to be early next week.
Dave
Geoff
<[EMAIL PROTECTED] To: [EMAIL PROTECTED]
om> cc:
Subject: custom routines
12/28/2001 08:36
PM
Please respond
to xalan-dev
Hi all,
I've been working on something for a few days now and I can't seem to get
it to work (and I may also be re-inventing the wheel to). I'm writing an
apache module that needs to generate XHTML pages by feeding in XML and XSL
to Xalan as strings. These strings will be built on the fly by the
module. Since the apache module is in C and Xalan is in C++ I think I
need to make a custom api of sorts. Here's what I have thus far (it is
meant to be a cross between mod_xslt.c and streamtransform.cpp):
#include <XalanTransformer/XalanTransformerDefinitions.hpp>
#include <util/PlatformUtils.hpp>
#include <cassert>
#if defined(XALAN_OLD_STREAM_HEADERS)
#include <strstream.h>
#else
#include <strstream>
#endif
#include "primary_xalan_api.h"
#include <XalanTransformer/XalanCAPI.h>
#include <XalanTransformer/XalanTransformer.hpp>
XALAN_TRANSFORMER_EXPORT_FUNCTION(void)
CustomStreamTransform(const char **xml,
const char **xsl,
XalanHandle
theXalanHandle,
void*
theOutputHandle,
XalanOutputHandlerType theOutputHandler,
XalanFlushHandlerType theFlushHandler)
{
int theResult = 0;
istrstream theXMLInStream(*xml, strlen(*xml));
istrstream theXSLInStream(*xsl, strlen(*xsl));
XSLTInputSource theInputSource(&theXMLInStream);
XSLTInputSource theStylesheetSource(&theXSLInStream);
XalanTransformerOutputStream theOutputStream(theOutputHandle,
theOutputHandler, theFlushHandler);
XalanOutputStreamPrintWriter thePrintWriter(theOutputStream);
XSLTResultTarget
theResultTarget(&thePrintWriter);
// Do the transformation...
return theXalanHandle.transform(
theInputSource,
theStylesheetSource,
theResultTarget);
}
Unfortunately, this does not compile. I wind up with this error:
primary_xalan_api.cpp: In function `void CustomStreamTransform(const
char **, const char **, void *, void *, long unsigned int
(*)(const char *, long unsigned int, void *), void (*)(void *))':
primary_xalan_api.cpp:37: variable `class XalanTransformerOutputStream
theOutputStream' has initializer but incomplete type
primary_xalan_api.cpp:39: `XalanOutputStreamPrintWriter' undeclared
(first use this function)
primary_xalan_api.cpp:39: (Each undeclared identifier is reported only once
primary_xalan_api.cpp:39: for each function it appears in.)
primary_xalan_api.cpp:39: parse error before `('
primary_xalan_api.cpp:40: `thePrintWriter' undeclared (first use this
function)
primary_xalan_api.cpp:46: request for member `transform' in
`theXalanHandle', which is of non-aggregate type `void *'
primary_xalan_api.cpp:37: warning: unused variable `{error}
theOutputStream'
primary_xalan_api.cpp:30: warning: unused variable `int theResult'
Can someone please point me in the right direction as to how to make this
work? Thanks in advance.
Geoff