void xslt::init::init_library() { xsltInit(); // set some defautls process_xincludes(true); set_allow_extension_functions_leak(false); // keep libxslt silent xsltSetGenericErrorFunc(0, xslt_error); xsltSetGenericDebugFunc(0, xslt_error); #ifdef HAVE_LIBEXSLT // load EXSLT exsltRegisterAll(); #endif }
Xslt_Convert::Xslt_Convert( const QString xmlfile , const QString xsltfile , QString resulterxml ) :EndingJob(false),xmlcodec(0),xsltcodec(0) { ////////qDebug() << "### Start Xslt_Convert ................... ->" << UmanTimeFromUnix(QTime_Null()); qt_unlink(XMLERROR_FILE); /* remove debug or error message from last */ qt_unlink(resulterxml); /* if exist */ ///////QTimer::singleShot(1000, this, SLOT(CheckError())); QFile *xfile = new QFile( xmlfile ); if (!xfile->exists()) { emit ErrorMsg(QString("File %1 not exist!").arg(xmlfile)); return; } QFile *sfile = new QFile( xsltfile ); if (!sfile->exists()) { emit ErrorMsg(QString("File %1 not exist!").arg(xsltfile)); return; } xmlcodec = GetcodecfromXml(xmlfile); xsltcodec = GetcodecfromXml(xsltfile); ///////////qDebug() << "### xmlfile .......................... " << xmlfile; ////////qDebug() << "### xsltfile .......................... " << xsltfile; ////////qDebug() << "### codec .......................... " << xmlcodec->mibEnum(); ////////qDebug() << "### codec .......................... " << xmlcodec->name(); //////qDebug() << "### codec .......................... " << xsltcodec->mibEnum(); ////////qDebug() << "### codec .......................... " << xsltcodec->name(); const QString maildate = QString("\"%1\"").arg(UmanTimeFromUnix(QTime_Null())); const QString unixtime = QString("\"%1\"").arg(QTime_Null()); const char* params[2]; params[0] = NULL; params[1] = NULL; /* ######################################### */ xsltStylesheetPtr cur = NULL; xmlDocPtr doc, outputDoc; xmlSubstituteEntitiesDefault(1); xmlLoadExtDtdDefaultValue = 1; /* ######################################### */ char* xslt_errors; xsltSetGenericErrorFunc(&xslt_errors, qt_libxml_error_handler); xmlSetGenericErrorFunc(&xslt_errors, qt_libxml_error_handler); xsltSetGenericDebugFunc(&xslt_errors, qt_libxml_error_handler); QByteArray gocharxslt = QFile::encodeName(xsltfile); cur = xsltParseStylesheetFile( (const xmlChar*)gocharxslt.data() ); doc = xmlParseFile( QFile::encodeName(xmlfile) ); outputDoc = xsltApplyStylesheet(cur, doc, params); xmlFreeDoc( doc ); /* free ram from xml! */ doc = outputDoc; /* swap input and output */ FILE* outfile = fopen( QFile::encodeName( resulterxml ), "w" ); xsltSaveResultToFile( outfile, doc, cur ); fclose( outfile ); xsltFreeStylesheet(cur); xmlFreeDoc( outputDoc ); xsltCleanupGlobals(); xmlCleanupParser(); //////// qDebug() << "### resulterxml .......................... " << resulterxml; //////// qDebug() << "### XMLERROR_FILE .......................... " << XMLERROR_FILE; Rstream = StreamFromFile(resulterxml); debug_msg = ReadFileUtf8Xml(XMLERROR_FILE); /////////qDebug() << "### resulterxml .......................... " << debug_msg; qt_unlink(XMLERROR_FILE); EndingJob = true; emit DebugMsg(debug_msg); }
int main(int argc, char **argv) { int i; xsltStylesheetPtr cur = NULL; xmlDocPtr doc, style; if (argc <= 1) { usage(argv[0]); return (1); } xmlInitMemory(); LIBXML_TEST_VERSION defaultLoader = xmlGetExternalEntityLoader(); xmlLineNumbersDefault(1); if (novalid == 0) /* TODO XML_DETECT_IDS | XML_COMPLETE_ATTRS */ xmlLoadExtDtdDefaultValue = 6; else xmlLoadExtDtdDefaultValue = 0; for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-")) break; if (argv[i][0] != '-') continue; #ifdef LIBXML_DEBUG_ENABLED if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug"))) { debug++; } else #endif if ((!strcmp(argv[i], "-v")) || (!strcmp(argv[i], "-verbose")) || (!strcmp(argv[i], "--verbose"))) { xsltSetGenericDebugFunc(stderr, NULL); } else if ((!strcmp(argv[i], "-o")) || (!strcmp(argv[i], "-output")) || (!strcmp(argv[i], "--output"))) { i++; output = argv[i++]; } else if ((!strcmp(argv[i], "-V")) || (!strcmp(argv[i], "-version")) || (!strcmp(argv[i], "--version"))) { printf("Using libxml %s, libxslt %s and libexslt %s\n", xmlParserVersion, xsltEngineVersion, exsltLibraryVersion); printf ("xsltproc was compiled against libxml %d, libxslt %d and libexslt %d\n", LIBXML_VERSION, LIBXSLT_VERSION, LIBEXSLT_VERSION); printf("libxslt %d was compiled against libxml %d\n", xsltLibxsltVersion, xsltLibxmlVersion); printf("libexslt %d was compiled against libxml %d\n", exsltLibexsltVersion, exsltLibxmlVersion); } else if ((!strcmp(argv[i], "-repeat")) || (!strcmp(argv[i], "--repeat"))) { if (repeat == 0) repeat = 20; else repeat = 100; } else if ((!strcmp(argv[i], "-novalid")) || (!strcmp(argv[i], "--novalid"))) { novalid++; } else if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout"))) { noout++; #ifdef LIBXML_DOCB_ENABLED } else if ((!strcmp(argv[i], "-docbook")) || (!strcmp(argv[i], "--docbook"))) { docbook++; #endif #ifdef LIBXML_HTML_ENABLED } else if ((!strcmp(argv[i], "-html")) || (!strcmp(argv[i], "--html"))) { html++; #endif } else if ((!strcmp(argv[i], "-timing")) || (!strcmp(argv[i], "--timing"))) { timing++; } else if ((!strcmp(argv[i], "-profile")) || (!strcmp(argv[i], "--profile"))) { profile++; } else if ((!strcmp(argv[i], "-norman")) || (!strcmp(argv[i], "--norman"))) { profile++; } else if ((!strcmp(argv[i], "-warnnet")) || (!strcmp(argv[i], "--warnnet"))) { xmlSetExternalEntityLoader(xsltNoNetExternalEntityLoader); } else if ((!strcmp(argv[i], "-nonet")) || (!strcmp(argv[i], "--nonet"))) { xmlSetExternalEntityLoader(xsltNoNetExternalEntityLoader); nonet = 1; #ifdef LIBXML_CATALOG_ENABLED } else if ((!strcmp(argv[i], "-catalogs")) || (!strcmp(argv[i], "--catalogs"))) { const char *catalogs; catalogs = getenv("SGML_CATALOG_FILES"); if (catalogs == NULL) { fprintf(stderr, "Variable $SGML_CATALOG_FILES not set\n"); } else { xmlLoadCatalogs(catalogs); } #endif #ifdef LIBXML_XINCLUDE_ENABLED } else if ((!strcmp(argv[i], "-xinclude")) || (!strcmp(argv[i], "--xinclude"))) { xinclude++; xsltSetXIncludeDefault(1); #endif } else if ((!strcmp(argv[i], "-param")) || (!strcmp(argv[i], "--param"))) { i++; params[nbparams++] = argv[i++]; params[nbparams++] = argv[i]; if (nbparams >= 16) { fprintf(stderr, "too many params\n"); return (1); } } else if ((!strcmp(argv[i], "-maxdepth")) || (!strcmp(argv[i], "--maxdepth"))) { int value; i++; if (sscanf(argv[i], "%d", &value) == 1) { if (value > 0) xsltMaxDepth = value; } } else if (!strcmp(argv[i], "--r")) { startRAutomatically = 1; RstartupScript = strchr(argv[i],'='); continue; } else { fprintf(stderr, "Unknown option %s\n", argv[i]); usage(argv[0]); return (1); } } params[nbparams] = NULL; /* * Replace entities with their content. */ xmlSubstituteEntitiesDefault(1); /* * Register the EXSLT extensions */ exsltRegisterAll(); registerRModule(0); if(startRAutomatically) { extern int RXSLT_internalSource(const char *fileName); int rargs = 1; const char *rargv[] = { "Sxsltproc" }; Rf_initEmbeddedR(rargs, rargv); loadXSLPackage(); if(RstartupScript && RstartupScript[0]) RXSLT_internalSource(RstartupScript); } for (i = 1; i < argc; i++) { if ((!strcmp(argv[i], "-maxdepth")) || (!strcmp(argv[i], "--maxdepth"))) { i++; continue; } else if ((!strcmp(argv[i], "-o")) || (!strcmp(argv[i], "-output")) || (!strcmp(argv[i], "--output"))) { i++; continue; } if ((!strcmp(argv[i], "-param")) || (!strcmp(argv[i], "--param"))) { i += 2; continue; } else if(!strcmp(argv[i], "--r")) { continue; } if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0)) { if (timing) gettimeofday(&begin, NULL); style = xmlParseFile((const char *) argv[i]); if (timing) { long msec; gettimeofday(&end, NULL); msec = end.tv_sec - begin.tv_sec; msec *= 1000; msec += (end.tv_usec - begin.tv_usec) / 1000; fprintf(stderr, "Parsing stylesheet %s took %ld ms\n", argv[i], msec); } if (style == NULL) { fprintf(stderr, "cannot parse %s\n", argv[i]); cur = NULL; } else { cur = xsltLoadStylesheetPI(style); if (cur != NULL) { /* it is an embedded stylesheet */ xsltProcess(style, cur, argv[i]); xsltFreeStylesheet(cur); exit(0); } cur = xsltParseStylesheetDoc(style); if (cur != NULL) { if (cur->indent == 1) xmlIndentTreeOutput = 1; else xmlIndentTreeOutput = 0; i++; } } break; } } /* * disable CDATA from being built in the document tree */ xmlDefaultSAXHandlerInit(); xmlDefaultSAXHandler.cdataBlock = NULL; if ((cur != NULL) && (cur->errors == 0)) { for (; i < argc; i++) { doc = NULL; if (timing) gettimeofday(&begin, NULL); #ifdef LIBXML_HTML_ENABLED if (html) doc = htmlParseFile(argv[i], NULL); else #endif #ifdef LIBXML_DOCB_ENABLED if (docbook) doc = docbParseFile(argv[i], NULL); else #endif doc = xmlParseFile(argv[i]); if (doc == NULL) { fprintf(stderr, "unable to parse %s\n", argv[i]); continue; } if (timing) { long msec; gettimeofday(&end, NULL); msec = end.tv_sec - begin.tv_sec; msec *= 1000; msec += (end.tv_usec - begin.tv_usec) / 1000; fprintf(stderr, "Parsing document %s took %ld ms\n", argv[i], msec); } xsltProcess(doc, cur, argv[i]); } xsltFreeStylesheet(cur); } #ifdef CAN_UNREGISTER_MODULES xsltUnregisterAllExtModules(); #endif xmlCleanupParser(); xmlMemoryDump(); return (0); }