XML + XSLT mit QT

Alles rund um die Programmierung mit Qt
Antworten
NoRulez
Beiträge: 208
Registriert: 19. Juni 2007 15:43

XML + XSLT mit QT

Beitrag 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
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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...
.........................
speack português italiano deutsch english castellà qt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du linkst mit MinGW gegen eine C++-Lib von MSVC - das kann nicht gehen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
NoRulez
Beiträge: 208
Registriert: 19. Juni 2007 15:43

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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
.........................
speack português italiano deutsch english castellà qt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

@patrik: png ist ne C-Lib, xerces dagegen C++ !!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

Christian81 hat geschrieben:@patrik: png ist ne C-Lib, xerces dagegen C++ !!
geht denn der reimp hack nur fuer C lib?
.........................
speack português italiano deutsch english castellà qt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten