blob: e54319e0349431e16cb54005e4cd96e1069b883c [file] [log] [blame]
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
* Licensed 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>
#include <cassert>
#if defined(XALAN_CLASSIC_IOSTREAMS)
#include <iostream.h>
#else
#include <iostream>
#endif
#if !defined(NDEBUG) && defined(_MSC_VER)
#include <crtdbg.h>
#endif
#include <xercesc/dom/DOMDocument.hpp>
#include <xercesc/dom/DOMImplementation.hpp>
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/framework/LocalFileInputSource.hpp>
#include <xalanc/Include/XalanAutoPtr.hpp>
#include <xalanc/XalanDOM/XalanDocument.hpp>
#include <xalanc/XalanDOM/XalanElement.hpp>
#include <xalanc/PlatformSupport/XalanOutputStreamPrintWriter.hpp>
#include <xalanc/PlatformSupport/XalanStdOutputStream.hpp>
#include <xalanc/XMLSupport/FormatterToXML.hpp>
#include <xalanc/XercesParserLiaison/FormatterToXercesDOM.hpp>
#include <xalanc/XercesParserLiaison/XercesDOMFormatterWalker.hpp>
#include <xalanc/XalanTransformer/XalanTransformer.hpp>
XALAN_USING_STD(cerr)
XALAN_USING_STD(cout)
XALAN_USING_STD(endl)
XALAN_USING_XERCES(DOMDocument)
XALAN_USING_XALAN(XalanCompiledStylesheet)
XALAN_USING_XALAN(XalanParsedSource)
XALAN_USING_XALAN(XalanTransformer)
void
serialize(const DOMDocument& theDocument)
{
XALAN_USING_XALAN(XalanStdOutputStream)
XALAN_USING_XALAN(XalanOutputStreamPrintWriter)
XALAN_USING_XALAN(FormatterToXML)
XALAN_USING_XALAN(XercesDOMFormatterWalker)
// Create an output stream and a PrintWriter for the
// output
XalanStdOutputStream theStream(cout);
XalanOutputStreamPrintWriter thePrintWriter(theStream);
// We're going to serialize XML...
FormatterToXML theFormatter(thePrintWriter);
// Do pretty-printing...
theFormatter.setDoIndent(true);
theFormatter.setIndent(2);
XercesDOMFormatterWalker theWalker(theFormatter);
// This will walk the document and send
// events to the FormatterToXML.
theWalker.traverse(&theDocument);
}
int
transformAndSerialize(
XalanTransformer& theTransformer,
const XalanParsedSource& theParsedSource,
const XalanCompiledStylesheet& theStylesheet)
{
XALAN_USING_XERCES(DOMDocument)
XALAN_USING_XERCES(DOMImplementation)
XALAN_USING_XALAN(FormatterToXercesDOM)
XALAN_USING_XALAN(XalanAutoPtr)
// This is the document which we'll build...
const XalanAutoPtr<DOMDocument> theDocument(DOMImplementation::getImplementation()->createDocument());
assert(theDocument.get() != 0);
// This is a class derived from FormatterListener, which
// we'll hook up to Xalan's output stage...
FormatterToXercesDOM theFormatter(theDocument.get(), 0);
// Do the transformation...
int theResult =
theTransformer.transform(
theParsedSource,
&theStylesheet,
theFormatter);
if (theResult != 0)
{
cerr << "Error transforming: "
<< theTransformer.getLastError()
<< endl;
}
else
{
serialize(*theDocument.get());
}
return theResult;
}
int
main(
int argc,
char* argv[])
{
#if !defined(NDEBUG) && defined(_MSC_VER)
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
#endif
int theResult = 0;
if (argc != 3)
{
cerr << "Usage: TransformToXercesDOM XMLFilePath XSLFilePath" << endl;
theResult = -1;
}
else
{
try
{
XALAN_USING_XERCES(XMLPlatformUtils)
XMLPlatformUtils::Initialize();
XalanTransformer::initialize();
{
XalanTransformer theTransformer;
const XalanParsedSource* theParsedSource = 0;
theResult = theTransformer.parseSource(argv[1], theParsedSource);
if (theResult != 0)
{
cerr << "Error parsing source document: "
<< theTransformer.getLastError()
<< endl;
}
else
{
assert(theParsedSource != 0);
const XalanCompiledStylesheet* theCompiledStylesheet = 0;
theResult = theTransformer.compileStylesheet(argv[2], theCompiledStylesheet);
if (theResult != 0)
{
cerr << "Error compiling stylesheet: "
<< theTransformer.getLastError()
<< endl;
}
else
{
theResult =
transformAndSerialize(theTransformer, *theParsedSource, *theCompiledStylesheet);
}
}
}
XalanTransformer::terminate();
XMLPlatformUtils::Terminate();
}
catch(...)
{
cerr << "Exception caught!" << endl;
theResult = -1;
}
}
return theResult;
}