Seite 1 von 1

XML + XSLT mit QT

Verfasst: 10. Juni 2008 12:41
von NoRulez
Hey @all,

ich denke ich habe schon irgendwo gelesen das XSLT zurzeit nicht von QT unterstützt wird. Verwenden tue ich im moment QT 4.4 für Windows. Mein Hauptproblem ist nun das ich die WebView/WebKit verwenden wollte. Da aber QT XML bzw. XSLT nicht kann versuchte ich dies mit Xerces bzw. Xalan zu lösen. Jedoch kann ich hier das Programm nicht kompilieren.

Code: Alles auswählen

######################################################################
# Automatically generated by qmake (2.01a) Tue Jun 10 10:37:08 2008
######################################################################

TEMPLATE = app
TARGET =
win32 {
DEPENDPATH += . \
               C:/xerces/xerces-c-windows_2000-msvc_60/include \
               C:/xalan/xalan-C_1_10_0-win32-msvc_60/include \
               C:/xerces/xerces-c-windows_2000-msvc_60/lib \
               C:/xalan/xalan-C_1_10_0-win32-msvc_60/lib \
               C:/Boost/lib
INCLUDEPATH += . \
               C:/xerces/xerces-c-windows_2000-msvc_60/include \
               C:/xalan/xalan-C_1_10_0-win32-msvc_60/include \
               C:/Boost/include/boost-1_33_1

#win32:LIBS += -LC:\xerces\xerces-c-windows_2000-msvc_60\lib -lxerces-c_2 -LC:\xalan\xalan-C_1_10_0-win32-msvc_60\lib -lXalan-C_1
#LIBS += -lxerces-c_2.lib -lXalan-C_1.lib
#win32:LIBS += C:/xerces/xerces-c-windows_2000-msvc_60/lib/xerces-c_2.lib \
#              C:/xalan/xalan-C_1_10_0-win32-msvc_60/lib/Xalan-C_1.lib
LIBS += -LC:\xerces\xerces-c-windows_2000-msvc_60\lib -LC:/xerces/xerces-c-windows_2000-msvc_60/lib -lxerces-c_2 -LC:/xalan/xalan-C_1_10_0-win32-msvc_60/lib -lXalan-C_1 \
        -LC:/Boost/lib -lboost_regex-mgw-1_33_1 -lboost_python-mgw-1_33_1
}
QT -= gui
CONFIG += console

# Input
HEADERS += xerces_strings.hpp
SOURCES += main.cpp
Beim kompilieren bekomme ich folgenden Fehler:

Code: Alles auswählen

C:\Documents and Settings\user\Desktop\XercesQTDemo>qmake && mingw32-make Release
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Documents and Settings/user/Desktop/XercesQTDemo'
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\Qt\4.4.0MinGW\include\QtCore" -I"..\..\..\..\Qt\4.4.0MinGW\include\QtCore" -I"..\..\..\..\Qt\4.4.0MinGW\include" -I"." -I"..\..\..\..\xerces\xerces-c-windows_2000-msvc_60\include" -I"..\..\..\..\xalan\xalan-C_1_10_0-win32-msvc_60\include" -I"..\..\..\..\Boost\include\boost-1_33_1" -I"..\..\..\..\Qt\4.4.0MinGW\include\ActiveQt" -I"release" -I"." -I"..\..\..\..\Qt\4.4.0MinGW\mkspecs\win32-g++" -o release\main.o main.cpp
In file included from main.cpp:22:
xerces_strings.hpp:25:46: warning: no newline at end of file
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-subsystem,console -mthreads -Wl -o release\XercesQTDemo.exe release/main.o  -L"c:\Qt\4.4.0MinGW\lib" -LC:\xerces\xerces-c-windows_2000-msvc_60\lib -LC:/xerces/xerces-c-windows_2000-msvc_60/lib -lxerces-c_2 -LC:/xalan/xalan-C_1_10_0-win32-msvc_60/lib -lXalan-C_1 -LC:/Boost/lib -lboost_regex-mgw-1_33_1 -lboost_python-mgw-1_33_1 -lQtCore4
release/main.o:main.cpp:(.text+0x67): undefined reference to `_imp___ZN11xercesc_2_76XMLUni22fgXercescDefaultLocaleE'
release/main.o:main.cpp:(.text+0x7e): undefined reference to `_imp___ZN11xercesc_2_716XMLPlatformUtils10InitializeEPKcS2_PNS_12PanicHandlerEPNS_13MemoryManagerEb'
release/main.o:main.cpp:(.text+0x99): undefined reference to `_imp___ZN11xercesc_2_76XMLUni22fgXercescDefaultLocaleE'
release/main.o:main.cpp:(.text+0xb0): undefined reference to `_imp___ZN11xercesc_2_716XMLPlatformUtils10InitializeEPKcS2_PNS_12PanicHandlerEPNS_13MemoryManagerEb'
release/main.o:main.cpp:(.text+0xb5): undefined reference to `xalanc_1_10::XalanMemMgrs::getDefaultXercesMemMgr()'
release/main.o:main.cpp:(.text+0xbd): undefined reference to `xalanc_1_10::XalanTransformer::initialize(xercesc_2_7::MemoryManager&)'
release/main.o:main.cpp:(.text+0xcd): undefined reference to `xalanc_1_10::XalanMemMgrs::getDefaultXercesMemMgr()'
release/main.o:main.cpp:(.text+0xdf): undefined reference to `xalanc_1_10::XalanTransformer::XalanTransformer(xercesc_2_7::MemoryManager&)'
release/main.o:main.cpp:(.text+0xef): undefined reference to `xalanc_1_10::XalanMemMgrs::getDefaultXercesMemMgr()'
release/main.o:main.cpp:(.text+0x10a): undefined reference to `xalanc_1_10::XSLTInputSource::XSLTInputSource(char const*, xercesc_2_7::MemoryManager&)'
release/main.o:main.cpp:(.text+0x11a): undefined reference to `xalanc_1_10::XalanMemMgrs::getDefaultXercesMemMgr()'
release/main.o:main.cpp:(.text+0x135): undefined reference to `xalanc_1_10::XSLTInputSource::XSLTInputSource(char const*, xercesc_2_7::MemoryManager&)'
release/main.o:main.cpp:(.text+0x145): undefined reference to `xalanc_1_10::XalanMemMgrs::getDefaultXercesMemMgr()'
release/main.o:main.cpp:(.text+0x160): undefined reference to `xalanc_1_10::XSLTResultTarget::XSLTResultTarget(char const*, xercesc_2_7::MemoryManager&)'
release/main.o:main.cpp:(.text+0x197): undefined reference to `xalanc_1_10::XalanTransformer::transform(xalanc_1_10::XSLTInputSource const&, xalanc_1_10::XSLTInputSource const&, xalanc_1_10::XSLTResultTarget const&)'
release/main.o:main.cpp:(.text+0x258): undefined reference to `xalanc_1_10::XSLTResultTarget::~XSLTResultTarget()'
release/main.o:main.cpp:(.text+0x263): undefined reference to `vtable for xalanc_1_10::XSLTInputSource'
release/main.o:main.cpp:(.text+0x26d): undefined reference to `_imp___ZN11xercesc_2_711InputSourceD2Ev'
release/main.o:main.cpp:(.text+0x286): undefined reference to `vtable for xalanc_1_10::XSLTInputSource'
release/main.o:main.cpp:(.text+0x290): undefined reference to `_imp___ZN11xercesc_2_711InputSourceD2Ev'
release/main.o:main.cpp:(.text+0x2b4): undefined reference to `xalanc_1_10::XalanTransformer::~XalanTransformer()'
release/main.o:main.cpp:(.text+0x2c1): undefined reference to `xalanc_1_10::XalanTransformer::terminate()'
release/main.o:main.cpp:(.text+0x2c7): undefined reference to `_imp___ZN11xercesc_2_716XMLPlatformUtils9TerminateEv'
release/main.o:main.cpp:(.text+0x3fe): undefined reference to `xalanc_1_10::XSLTResultTarget::~XSLTResultTarget()'
release/main.o:main.cpp:(.text+0x409): undefined reference to `vtable for xalanc_1_10::XSLTInputSource'
release/main.o:main.cpp:(.text+0x416): undefined reference to `_imp___ZN11xercesc_2_711InputSourceD2Ev'
release/main.o:main.cpp:(.text+0x42f): undefined reference to `vtable for xalanc_1_10::XSLTInputSource'
release/main.o:main.cpp:(.text+0x43c): undefined reference to `_imp___ZN11xercesc_2_711InputSourceD2Ev'
release/main.o:main.cpp:(.text+0x463): undefined reference to `xalanc_1_10::XalanTransformer::~XalanTransformer()'
release/main.o:main.cpp:(.text+0x473): undefined reference to `xalanc_1_10::XalanTransformer::terminate()'
release/main.o:main.cpp:(.text+0x479): undefined reference to `_imp___ZN11xercesc_2_716XMLPlatformUtils9TerminateEv'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\XercesQTDemo.exe] Error 1
mingw32-make[1]: Leaving directory `C:/Documents and Settings/user/Desktop/XercesQTDemo'
mingw32-make: *** [Release] Error 2

C:\Documents and Settings\user\Desktop\XercesQTDemo>
Hoffe mir kann da jemand helfen
Hier das demofile (main.cpp)

Code: Alles auswählen

#include <QCoreApplication>
#include <iostream>

#include <xalanc/Include/PlatformDefinitions.hpp>
#include <xalanc/XalanTransformer/XalanTransformer.hpp>
#include <xalanc/XSLT/XSLTInputSource.hpp>
#include <xalanc/XSLT/XSLTResultTarget.hpp>
#include <xercesc/util/PlatformUtils.hpp>

#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(__TOS_WIN__)
	#if defined(_DEBUG)
		//#pragma comment(linker, "/NODEFAULTLIB:libcmt.lib")
		#pragma comment(lib, "xerces-c_2D.lib")
		//#pragma comment(lib, "xerces-depdom_2D.lib")
		#pragma comment(lib, "Xalan-C_1D.lib")
	#elif defined(NDEBUG)
		#pragma comment(lib, "xerces-c_2.lib")
		//#pragma comment(lib, "xerces-depdom_2.lib")
		#pragma comment(lib, "Xalan-C_1.lib")
	#endif
#endif
#include "xerces_strings.hpp"  // Example 14-4

using namespace std;
using namespace xercesc;
using namespace xalanc;

// RAII utility that initializes the parser and frees resources
// when it goes out of scope
struct XalanInitializer {
    XalanInitializer( )
    {
        XMLPlatformUtils::Initialize( );
        XalanTransformer::initialize( );
    }
    ~XalanInitializer( )
    {
        XalanTransformer::terminate( );
        XMLPlatformUtils::Terminate( );
    }
};

int main(int argc, char* argv[]) {
    try {
        XMLPlatformUtils::Initialize();
        XalanInitializer  init;                 // Initialize Xalan.
        XalanTransformer  xslt;                 // XSLT engine.
        XSLTInputSource   xml("report.xml");   // XML document from
                                                // Example 14-1.
        XSLTInputSource   xsl("report.xsl");   // Stylesheet from
                                              // Example 14-19.
        XSLTResultTarget  html("report.html"); // xslt's output.

         Perform transformation.
        if (xslt.transform(xml, xsl, html) != 0) {
            cout << "xml error: " << xslt.getLastError( ) << "\n";
        }
    }
    catch (const XMLException& e) {
    //    cout << "xml error: " << toNative(e.getMessage( )) << "\n";
        return EXIT_FAILURE;
    }
    catch (const exception& e) {
        cout << e.what( ) << "\n";
        return EXIT_FAILURE;
    }
    return 0;
}

Lg NoRulez

Verfasst: 10. Juni 2008 15:45
von patrik08
Mit Mingw Compiler geht es 100% mit VS 2080 kann es vielleicht gehen.


ich habe es vor 2 jahre gemacht ....
http://sourceforge.net/projects/visual-xsltproc/ sogar mit fehler callback funktion zum debuggen...

idee kopiert von...
http://albumshaper.sourceforge.net/

IMO : nicht jede lib kann man mit dem selbe compiler machen..
xerces kann ich niemand emfehlen ...
nur xsl und libxml2 von gnome das lauft immer auf alle OS...

Verfasst: 10. Juni 2008 15:46
von Christian81
Du linkst mit MinGW gegen eine C++-Lib von MSVC - das kann nicht gehen.

Verfasst: 11. Juni 2008 09:34
von NoRulez
Bei Xerces beispielsweise gibts nur folgendes:

Code: Alles auswählen

xerces-c_2_8_0-x86-windows-vc_7_1.zip  [PGP] [MD5]
xerces-c_2_8_0-x86-windows-vc_8_0.zip  [PGP] [MD5]
xerces-c_2_8_0-x86-linux-gcc_3_4.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-x86-solaris-gcc_3_4.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-x86-solaris-cc_5_7.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-sparc-solaris-gcc_3_4.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-sparc-solaris-cc_5_7.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-powerpc-aix-xlc_7_0.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-hppa-hpux-acc_3.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-hppa-hpux-acc_3_AA.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-ia64-hpux-acc_6.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-x86-macosx-gcc_4_0.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-powerpc-macosx-gcc_4_0.tar.gz  [PGP] [MD5]

Also bleibt mir hier nur vc_7_1 und vc_8_0 oder kann ich mit MinGW auch linux-gcc benutzen?

Lg NoRulez

Verfasst: 11. Juni 2008 09:59
von Christian81
NoRulez hat geschrieben: Also bleibt mir hier nur vc_7_1 und vc_8_0 oder kann ich mit MinGW auch linux-gcc benutzen?
Nein, wie sollte das gehen?
Oder xerces selbst bauen oder xerces-c benutzen.

Verfasst: 14. Juni 2008 10:09
von patrik08
NoRulez hat geschrieben:Bei Xerces beispielsweise gibts nur folgendes:

Code: Alles auswählen

xerces-c_2_8_0-x86-windows-vc_7_1.zip  [PGP] [MD5]
xerces-c_2_8_0-x86-windows-vc_8_0.zip  [PGP] [MD5]
xerces-c_2_8_0-x86-linux-gcc_3_4.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-x86-solaris-gcc_3_4.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-x86-solaris-cc_5_7.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-sparc-solaris-gcc_3_4.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-sparc-solaris-cc_5_7.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-powerpc-aix-xlc_7_0.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-hppa-hpux-acc_3.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-hppa-hpux-acc_3_AA.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-ia64-hpux-acc_6.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-x86-macosx-gcc_4_0.tar.gz  [PGP] [MD5] 
xerces-c_2_8_0-powerpc-macosx-gcc_4_0.tar.gz  [PGP] [MD5]

Also bleibt mir hier nur vc_7_1 und vc_8_0 oder kann ich mit MinGW auch linux-gcc benutzen?

Lg NoRulez

Das ist genau was ich won xerces nicht mag...
es sollte doch moeglich sein mit define es fuer alle os gehen! andere lib machen es ja auch... Kurzlich hatte ich die neue gepachte LIBPNG von mozilla foundation in den handen ... da kann man nur stauenen..
http://fop-miniscribus.googlecode.com/s ... zilla_Way/


Mit dem reimp von mingw kannst ja versuchen die VS lib auf mingw zu drehen... (ist aber keine saubere sache ) mit dem mysql lib macht man es ja auch...

http://wiki.qtcentre.org/index.php?titl ... sing_MinGW

einfach umbenennen libmysql.lib in xerec???.lib

Code: Alles auswählen

cd C:\MySQL\lib
reimp -d libmysql.lib
dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib C:\MinGW\lib\libmysql.a

Aber wie vorher gesagt xslt auf qt ist einfach selber zu kompilieren ...
es gibt ja eine steinharte anleitung....

http://albumshaper.wiki.sourceforge.net ... on+Windows ....

die gnome xslt lib ist viel einfacher und schnell....
die transformation ist nur zu lesen im code von:
http://sourceforge.net/projects/visual-xsltproc/ und auf mac und linux geht es auf dem ersten schlag

Verfasst: 14. Juni 2008 10:11
von Christian81
@patrik: png ist ne C-Lib, xerces dagegen C++ !!

Verfasst: 14. Juni 2008 10:23
von patrik08
Christian81 hat geschrieben:@patrik: png ist ne C-Lib, xerces dagegen C++ !!
geht denn der reimp hack nur fuer C lib?

Verfasst: 14. Juni 2008 16:49
von Christian81
patrik08 hat geschrieben: geht denn der reimp hack nur fuer C lib?
Ja, die C-ABI ist definiert, die C++-ABI hingegen nicht. Deshalb kann man auch nicht gcc3 und gcc4 mischen und eben auch nicht msvc und mingw.