blob: 442cf2c54781e2d170978f3348e3d24254d9c4ab [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <xalanc/Include/PlatformDefinitions.hpp>
#if defined(XALAN_CLASSIC_IOSTREAMS)
#include <iostream.h>
#else
#include <iostream>
#endif
// for 'C' strcmp function used in parsing main() parameters
#include <string.h>
#include <xercesc/util/PlatformUtils.hpp>
#include <xalanc/XalanTransformer/XalanTransformer.hpp>
// The next 2 include files are for parsing XML documents as nodeset parameters.
#include <xalanc/XalanTransformer/XalanParsedSource.hpp>
#include <xalanc/XSLT/XSLTInputSource.hpp>
// DATA STORAGE FOR TOP-LEVEL PARAMETERS
struct {
char * parmType; // -s key string, -n key number, -d key document
char * parmName; // the key or parameter name
char * parmValue; // the represented string value
} Parameter[15];
// The Parsed Document Nodesets
XALAN_USING_XALAN(XalanParsedSource)
const XalanParsedSource * NodesetParam[15] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
// THE USAGE HELP FUNCTION
int Usage()
{
XALAN_USING_STD(cerr)
XALAN_USING_STD(endl)
cerr << "Usage: UseStylesheetParam xmlFile xslFile outFile [parameters]" <<endl
<< " Parameters are:" <<endl
<< " -s name \"'String Value'\"" <<endl
<< " -n name NumberValue" <<endl
<< " -d name \"Document Nodeset File\"" <<endl;
return 1;
}
// THE MAIN SAMPLE PROGRAM
int
main(
int argc,
char* argv[])
{
XALAN_USING_STD(cerr)
XALAN_USING_STD(endl)
int theResult = 0;
int i, j;
int paramCount = 0;
if (argc < 4)
{
return Usage();
}
// Collect the top-level parameter arguments
for (i=4, j=0; i < argc;)
{
if (!strcmp(argv[i],"-s") || !strcmp(argv[i],"-n") || !strcmp(argv[i],"-d"))
{
Parameter[j].parmType = argv[i++];
Parameter[j].parmName = argv[i++];
Parameter[j].parmValue = argv[i++];
paramCount = ++j;
}
else return Usage();
}
{
XALAN_USING_XERCES(XMLPlatformUtils)
XALAN_USING_XERCES(XMLException)
XALAN_USING_XALAN(XalanTransformer)
XALAN_USING_XALAN(XSLTInputSource)
// Call the static initializer for Xerces.
try
{
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch)
{
cerr << "Error during Xerces initialization. Error code was "
<< toCatch.getCode()
<< "."
<< endl;
theResult = -1;
}
if ( theResult == 0)
{
// Initialize Xalan.
XalanTransformer::initialize();
{
XALAN_USING_XALAN(XalanDOMString)
// Create a XalanTransformer.
XalanTransformer theXalanTransformer;
// Prepare and set the top-level parameters
for (j = 0; j < paramCount; j++)
{
// The String Top-Level Parameters
if (!strcmp(Parameter[j].parmType, "-s"))
{
theXalanTransformer.setStylesheetParam(
Parameter[j].parmName,
Parameter[j].parmValue);
}
// The DOUBLE Number Top-Level Parameters
if (!strcmp(Parameter[j].parmType, "-n"))
{
theXalanTransformer.setStylesheetParam(
Parameter[j].parmName,
strtod(Parameter[j].parmValue, NULL));
}
// The Parsed XML Document (nodeset) Top-Level Parameters
if (!strcmp(Parameter[j].parmType, "-d"))
{
// NodesetParam[j] = NULL;
if (theXalanTransformer.parseSource(
XSLTInputSource(Parameter[j].parmValue,
theXalanTransformer.getMemoryManager()),
NodesetParam[j]) == 0)
{
theXalanTransformer.setStylesheetParam(
Parameter[j].parmName,
NodesetParam[j]->getDocument());
}
else
{
cerr << "WARNING: XML parsing error in "
<< Parameter[j].parmName << " file: "
<< Parameter[j].parmValue <<endl
<< theXalanTransformer.getLastError() <<endl <<endl;
}
}
}
// Our input files...The assumption is that the executable will be run
// from same directory as the input files.
// argv[1]="foo.xml"
// argv[2]="foo.xslt"
// argv[3]="foo.out"
// -d parmA "parmA.xml"
// -d parmB "parmB.xml"
// -s stringA "'This is a test string'"
// -n numberA 432.12345
theResult = theXalanTransformer.transform(argv[1], argv[2], argv[3]);
if(theResult != 0)
{
cerr << "UseStylesheetParam Error: \n" << theXalanTransformer.getLastError()
<< endl
<< endl;
}
// Clear the top-level parameters - Note: They are sticky across transformations.
theXalanTransformer.clearStylesheetParams();
// Destroy the parsed XML documents used as nodeset parameters.
for (j=0; j < paramCount; j++)
{
if (!strcmp(Parameter[j].parmType, "-d") && NodesetParam[j])
theXalanTransformer.destroyParsedSource(NodesetParam[j]);
}
}
// Terminate Xalan...
XalanTransformer::terminate();
}
// Terminate Xerces...
XMLPlatformUtils::Terminate();
// Clean up the ICU, if it's integrated...
XalanTransformer::ICUCleanUp();
}
return theResult;
}