/* * 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 #include #if defined(XALAN_CLASSIC_IOSTREAMS) #include #else #include #endif #if !defined(NDEBUG) && defined(_MSC_VER) #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include 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 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; }