Results 1 to 10 of 10

Thread: QTextStream capture stdout from xsltParseStylesheetFile

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    May 2006
    Posts
    788
    Thanks
    49
    Thanked 48 Times in 46 Posts
    Qt products
    Qt4
    Platforms
    MacOS X Unix/X11 Windows

    Default Re: QTextStream capture stdout from xsltParseStylesheetFile

    Now i cann capture all error from xslt line nr.. tag ....bla bla....

    SUPER!

    is running so....

    Qt Code:
    1. /* class */
    2. void Gui_Front::Convert_Group()
    3. {
    4. QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
    5. bool fxml, fxslt, rfile;
    6. QString capturesdout;
    7. #if defined Q_WS_WIN
    8. QString disk_pre = QDir::homePath(); /* cat c: or d: ECC...*/
    9. QString disk = disk_pre.left(2);
    10. #define SHORTFILE \
    11. QString( "%1\\apache.xml" ).arg( disk ) /* window space name file trouble xslt */
    12. #define DATA_FILE_XML \
    13. QString( "%1\\data.xml" ).arg( disk )
    14. #define DATA_CONVERTER \
    15. QString( "%1\\convert.xml" ).arg( disk )
    16.  
    17. #else
    18. #define SHORTFILE \
    19. QString( "%1apache.xml" ).arg( WORK_CACHEDIR )
    20. #define DATA_FILE_XML \
    21. QString( "%1data.xml" ).arg( WORK_CACHEDIR )
    22. #define DATA_CONVERTER \
    23. QString( "%1convert.xsl" ).arg( WORK_CACHEDIR )
    24. #endif
    25. #define XSLTERRORFILE \
    26. QString( "%1ErMsgXSLT.dat" ).arg( WORK_CACHEDIR )
    27.  
    28. const char* params[5];
    29. params[0] = NULL;
    30. params[1] = NULL;
    31. params[2] = NULL;
    32. params[3] = NULL;
    33. params[4] = NULL;
    34.  
    35. qDebug() << "### SHORTFILE " << SHORTFILE;
    36. qDebug() << "### DATA_FILE_XML " << DATA_FILE_XML;
    37. qDebug() << "### DATA_CONVERTER " << DATA_CONVERTER;
    38. QString actualxslt = xsl_area->document()->toPlainText();
    39. fxslt = db->file_put_contents(DATA_CONVERTER,actualxslt);
    40. QString actualxml = xml_area->document()->toPlainText();
    41. fxml = db->file_put_contents(DATA_FILE_XML,actualxslt);
    42.  
    43. /* ######################################### */
    44. xsltStylesheetPtr cur = NULL;
    45. xmlDocPtr doc, outputDoc;
    46. xmlSubstituteEntitiesDefault(1);
    47. xmlLoadExtDtdDefaultValue = 1;
    48. /* ######################################### */
    49. char* xslt_errors;
    50. xsltSetGenericErrorFunc(&xslt_errors, qt_libxml_error_handler); /* error reg */
    51. xmlSetGenericErrorFunc (&xslt_errors, qt_libxml_error_handler);
    52. xsltSetGenericDebugFunc (&xslt_errors, qt_libxml_error_handler);
    53.  
    54. QByteArray gocharxslt = DATA_CONVERTER.toAscii();
    55. cur = xsltParseStylesheetFile( (const xmlChar*)gocharxslt.data() );
    56.  
    57. doc = xmlParseFile( QFile::encodeName(DATA_FILE_XML) );
    58. /*xsltSetGenericErrorFunc(doc, qt_libxml_error_handler);
    59.   xsltSetGenericDebugFunc(doc, qt_libxml_error_handler);*/
    60. outputDoc = xsltApplyStylesheet(cur, doc, params);
    61. xmlFreeDoc( doc ); /* free ram from xml! */
    62. doc = outputDoc; /* swap input and output */
    63. FILE* outfile = fopen( QFile::encodeName( SHORTFILE ), "w" );
    64. xsltSaveResultToFile( outfile, doc, cur );
    65. fclose( outfile );
    66. xsltFreeStylesheet(cur);
    67. xmlFreeDoc( outputDoc );
    68. xsltCleanupGlobals();
    69. xmlCleanupParser();
    70.  
    71. if (db->is_file(SHORTFILE)) {
    72. result_area->clear();
    73. result_area->insertPlainText(db->file_get_contents(SHORTFILE));
    74. result_area->toPlainText();
    75. }
    76. /*db->qt_unlink(SHORTFILE);*/
    77. /*qDebug() << "### xmlGenericErrorContext " << xmlGenericErrorContext;*/
    78.  
    79.  
    80. QApplication::restoreOverrideCursor();
    81. }
    82.  
    83. /* external function !*/
    84. void qt_libxml_error_handler(void *ctx, const char *msg, ...)
    85. {
    86. va_list args;
    87. QString message;
    88.  
    89. int size = 256;
    90. char * buf = new char[ size ];
    91.  
    92. while( 1 ) {
    93. va_start(args, msg);
    94. int retval = ::vsnprintf( buf, size, msg, args );
    95. va_end(args);
    96.  
    97. if( -1 < retval && retval < size ) { // everything was OK
    98. message = buf;
    99. /*if (!message.startsWith("error", Qt::CaseInsensitive)) {*/
    100. qDebug() << "### 1 error captured to insert on class as list or so.... " << message;
    101. /*}*/
    102. break;
    103. }
    104. else if( retval > -1 ) { // buffer too small
    105. size = retval + 1;
    106. delete [] buf;
    107. buf = new char[ size ];
    108. }
    109. else { // error
    110. // ...
    111. break;
    112. }
    113. }
    114.  
    115. delete [] buf;
    116. }
    To copy to clipboard, switch view to plain text mode 

  2. #2
    Join Date
    May 2006
    Posts
    788
    Thanks
    49
    Thanked 48 Times in 46 Posts
    Qt products
    Qt4
    Platforms
    MacOS X Unix/X11 Windows

    Default Re: QTextStream capture stdout from xsltParseStylesheetFile

    Much tanks to jacek http://www.qtcentre.org/forum/u-jacek-7.html

    from This Thread is Been born a new sf.net projekt...

    A Visual xsltproc Debugger ....

    http://sourceforge.net/projects/visual-xsltproc/

Similar Threads

  1. Capture a keyboard event
    By mahe2310 in forum Qt Programming
    Replies: 8
    Last Post: 16th February 2006, 11:19

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.