You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by au...@apache.org on 2001/04/20 15:48:44 UTC
cvs commit: xml-xalan/c/samples/ExternalFunction ExternalFunction.cpp foo.xsl
auriemma 01/04/20 06:48:44
Modified: c/samples/ExternalFunction ExternalFunction.cpp foo.xsl
Log:
Updated to use the XalanTransformer class.
Revision Changes Path
1.15 +64 -137 xml-xalan/c/samples/ExternalFunction/ExternalFunction.cpp
Index: ExternalFunction.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/samples/ExternalFunction/ExternalFunction.cpp,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- ExternalFunction.cpp 2001/01/08 20:26:25 1.14
+++ ExternalFunction.cpp 2001/04/20 13:48:43 1.15
@@ -8,49 +8,22 @@
-#if defined(XALAN_OLD_STREAM_HEADERS)
-#include <fstream.h>
-#include <iostream.h>
-#else
-#include <fstream>
-#include <iostream>
-#endif
-
-
-
#include <util/PlatformUtils.hpp>
-
-#include <PlatformSupport/DOMStringHelper.hpp>
+#include <XalanTransformer/XalanTransformer.hpp>
-#include <DOMSupport/DOMSupportDefault.hpp>
-
-
-#include <XPath/XObjectFactoryDefault.hpp>
-#include <XPath/XPath.hpp>
#include <XPath/XPathFactoryDefault.hpp>
-#include <XSLT/StylesheetConstructionContextDefault.hpp>
-#include <XSLT/StylesheetExecutionContextDefault.hpp>
-#include <XSLT/XSLTEngineImpl.hpp>
-#include <XSLT/XSLTInit.hpp>
-#include <XSLT/XSLTInputSource.hpp>
#include <XSLT/XSLTProcessorEnvSupportDefault.hpp>
-#include <XSLT/XSLTResultTarget.hpp>
-
-#include <XalanSourceTree/XalanSourceTreeDOMSupport.hpp>
-#include <XalanSourceTree/XalanSourceTreeParserLiaison.hpp>
-
-
// This class defines a function that will return the square root
// of its argument.
class FunctionSquareRoot : public Function
@@ -179,16 +152,20 @@
/**
* Execute an XPath function object. The function must return a valid
- * object. Called if function has no parameters.
+ * object.
*
* @param executionContext executing context
- * @param context current context node
+ * @param context current context node
+ * @param opPos current op position
+ * @param args vector of pointers to XObject arguments
* @return pointer to the result XObject
*/
virtual XObjectPtr
execute(
XPathExecutionContext& executionContext,
- XalanNode* context)
+ XalanNode* context,
+ int /* opPos */,
+ const XObjectArgVectorType& args)
{
time_t theTime;
@@ -244,9 +221,10 @@
#if !defined(XALAN_NO_NAMESPACES)
using std::cerr;
using std::endl;
- using std::ofstream;
#endif
+ int theResult = 0;
+
if (argc != 1)
{
cerr << "Usage: ExternalFunction"
@@ -255,117 +233,66 @@
}
else
{
- try
- {
- // Call the static initializer for Xerces...
- XMLPlatformUtils::Initialize();
+ // Call the static initializer for Xerces.
+ XMLPlatformUtils::Initialize();
- {
- // Initialize the Xalan XSLT subsystem...
- XSLTInit theInit;
-
- // Create some support objects that are necessary for running the processor...
- XalanSourceTreeDOMSupport theDOMSupport;
- XalanSourceTreeParserLiaison theParserLiaison(theDOMSupport);
-
- // Hook the two together...
- theDOMSupport.setParserLiaison(&theParserLiaison);
-
- // Create some more support objects.
- XSLTProcessorEnvSupportDefault theXSLTProcessorEnvSupport;
- XObjectFactoryDefault theXObjectFactory;
- XPathFactoryDefault theXPathFactory;
-
- // Create a processor...
- XSLTEngineImpl theProcessor(
- theParserLiaison,
- theXSLTProcessorEnvSupport,
- theDOMSupport,
- theXObjectFactory,
- theXPathFactory);
-
- // Connect the processor to the support object...
- theXSLTProcessorEnvSupport.setProcessor(&theProcessor);
-
- // Create a stylesheet construction context, and a stylesheet
- // execution context...
- StylesheetConstructionContextDefault theConstructionContext(
- theProcessor,
- theXSLTProcessorEnvSupport,
- theXPathFactory);
-
- StylesheetExecutionContextDefault theExecutionContext(
- theProcessor,
- theXSLTProcessorEnvSupport,
- theDOMSupport,
- theXObjectFactory);
-
- // Our input files...
- // WARNING!!! You may need to modify these absolute paths depending on where
- // you've put the Xalan sources.
- const XalanDOMString theXMLFileName("foo.xml");
- const XalanDOMString theXSLFileName("foo.xsl");
-
- // Our input sources...
- XSLTInputSource theInputSource(c_wstr(theXMLFileName));
- XSLTInputSource theStylesheetSource(c_wstr(theXSLFileName));
-
- // Our output target...
- const XalanDOMString theOutputFile("foo.out");
- XSLTResultTarget theResultTarget(theOutputFile);
-
- // Install the function directly into the XPath
- // function table. We don't recommend doing this,
- // but you can if you want to be evil! ;-) Since
- // the function is in the XPath table, the XPath
- // parser will treat it like any other XPath
- // function. Therefore, it cannot have a namespace
- // prefix. It will also be available to every
- // processor in the executable's process, since there
- // is one static XPath function table.
- XPath::installFunction(
- XalanDOMString("asctime"),
- FunctionAsctime());
-
- // The namespace for our functions...
- const XalanDOMString theNamespace("http://ExternalFunction.xalan-c++.xml.apache.org");
-
- // Install the function in the global space. All
- // instances will know about the function, so all
- // processors which use an instance of this the
- // class XPathEnvSupportDefault will be able to
- // use the function.
- XSLTProcessorEnvSupportDefault::installExternalFunctionGlobal(
- theNamespace,
- XalanDOMString("square-root"),
- FunctionSquareRoot());
-
- // Install the function in the local space. It will only
- // be installed in this instance, so no other instances
- // will know about the function...
- theXSLTProcessorEnvSupport.installExternalFunctionLocal(
- theNamespace,
- XalanDOMString("cube"),
- FunctionCube());
-
- theProcessor.process(
- theInputSource,
- theStylesheetSource,
- theResultTarget,
- theConstructionContext,
- theExecutionContext);
- }
+ // Initialize Xalan.
+ XalanTransformer::initialize();
- // Call the static terminator for Xerces...
- XMLPlatformUtils::Terminate();
- }
- catch(...)
+ // Create a XalanTransformer.
+ XalanTransformer theXalanTransformer;
+
+ // Our input files...The assumption is that the executable will be run
+ // from same directory as the input files.
+ const char* theXMLFileName = "foo.xml";
+ const char* theXSLFileName = "foo.xsl";
+
+ // Our output target...
+ const char* theOutputFileName = "foo.out";
+
+ // The namespace for our functions...
+ const XalanDOMString theNamespace("http://ExternalFunction.xalan-c++.xml.apache.org");
+
+ // Install the function in the local space. It will only
+ // be installed in this instance, so no other instances
+ // will know about the function...
+ theXalanTransformer.installExternalFunction(
+ theNamespace,
+ XalanDOMString("asctime"),
+ FunctionAsctime());
+
+ // Install the function in the local space. It will only
+ // be installed in this instance, so no other instances
+ // will know about the function...
+ theXalanTransformer.installExternalFunction(
+ theNamespace,
+ XalanDOMString("square-root"),
+ FunctionSquareRoot());
+
+ // Install the function in the local space. It will only
+ // be installed in this instance, so no other instances
+ // will know about the function...
+ theXalanTransformer.installExternalFunction(
+ theNamespace,
+ XalanDOMString("cube"),
+ FunctionCube());
+
+ // Do the transform.
+ theResult = theXalanTransformer.transform(theXMLFileName, theXSLFileName, theOutputFileName);
+
+ if(theResult != 0)
{
- cerr << "Exception caught!!!"
+ cerr << "ExternalFunction Error: \n" << theXalanTransformer.getLastError()
<< endl
<< endl;
}
+
+ // Terminate Xalan.
+ XalanTransformer::terminate();
+
+ // Call the static terminator for Xerces.
+ XMLPlatformUtils::Terminate();
}
- return 0;
+ return theResult;
}
1.6 +1 -1 xml-xalan/c/samples/ExternalFunction/foo.xsl
Index: foo.xsl
===================================================================
RCS file: /home/cvs/xml-xalan/c/samples/ExternalFunction/foo.xsl,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- foo.xsl 2001/02/12 17:03:05 1.5
+++ foo.xsl 2001/04/20 13:48:43 1.6
@@ -27,7 +27,7 @@
<xsl:template match="now">
<when>
- Date and time when we figured all this out: <xsl:value-of select="asctime()"/>.
+ Date and time when we figured all this out: <xsl:value-of select="external:asctime()"/>.
</when>
</xsl:template>
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org