Xerces C++



  • Ich muss mit Xerces-C++ ein Programm schreiben, welches eine XML Datei gegen ein Schema prüft. Ist das Schema falsch, soll die Datei in ein bestimmtes Verzeichnis z.B. incoming zurück geschickt werden. Leider komme ich mit Xerces gar nicht klar. Bin da totaler Anfänger sowohl in XML als auch Xerces. So ist das Berufsleben leider 😞

    Ich hab hier mal einen Quellcode, der aber auch nicht funktioniert. Vielleicht kann mir jemand helfen, es wäre echt super dringend Danke

    #include <xercesc/parsers/XercesDOMParser.hpp>
        #include <xercesc/dom/DOM.hpp>
        #include <xercesc/sax/HandlerBase.hpp>
        #include <xercesc/util/XMLString.hpp>
        #include <xercesc/util/PlatformUtils.hpp>
    
        #if defined(XERCES_NEW_IOSTREAMS)
        #include <iostream>
        #else
        #include <iostream.h>
        #endif
    
        XERCES_CPP_NAMESPACE_USE
    
        int main (int argc, char* args[]) {
    
            try {
                XMLPlatformUtils::Initialize();
            }
            catch (const XMLException& toCatch) {
                char* message = XMLString::transcode(toCatch.getMessage());
                cout << "Error during initialization! :\n"
                     << message << "\n"; <
                XMLString::release(&message);
                return 1;
            }
    
            XercesDOMParser* parser = new XercesDOMParser();
            parser->setValidationScheme(XercesDOMParser::Val_Always);    // optional.
            parser->setDoNamespaces(true);    // optional
    
            ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
            parser->setErrorHandler(errHandler);
    
            char* xmlFile = "regelwerk.xml";
    
            try {
                parser->parse(xmlFile);
            }
            catch (const XMLException& toCatch) {
                char* message = XMLString::transcode(toCatch.getMessage());
                cout << "Exception message is: \n"
                     << message << "\n";
                XMLString::release(&message);
                return -1;
            }
            catch (const DOMException& toCatch) {
                char* message = XMLString::transcode(toCatch.msg);
                cout << "Exception message is: \n"
                     << message << "\n";
                XMLString::release(&message);
                return -1;
            }
            catch (...) {
                cout << "Unexpected Exception \n" ;
                return -1;
            }
    
            delete parser;
            delete errHandler;
            return 0;
        }
    


  • Super witzig! Mein Auto funktioniert nicht, wer kann mir helfen?



  • Gibts hier auch produktive Antworten ? Wenn jemand keine Ahnung von was hat soll er lieber leise sein @ Artchi.

    Ich dachte man bekommt hier qualifizierte Hilfe



  • Ein bißchen bemühen mußt Du Dich schon auch. Einfach nur nen Code hinklatschen mit den Worten das funktioniert nicht. Das ist schon ein bißchen wenig. Wo genau hakts denn? Was macht das Programm schon richtig und was macht es falsch?



  • Tja, wenn ich das nur wüsste. Als Compiler Fehler bekomm ich nur

    23 c:\xerces~1\test.cpp parse error before `<'

    Das ist ja das Problem. Hätte ich da mehr Durchsicht wüsste ich ja auch mehr zu schreiben.

    Ich bin auch gerne für weitere Beispiele, Tutorials etc. dankbar da ich wirklich momentan was dieses Xerces angeht auf dem Schlauch steh



  • Also, der Compiler gibt dir doch eindeutig den Fehler bekannt! Schau dir mal Zeile 23 an!!!!!!!!!! Füge die mal direkt hinter Zeile 22...

    Und, war das so schwer den compiler error zu posten? Denkst du hier liest sich jemand dein komplettes Listing durch und spielt im Gehirn "Compiler"???



  • Leider gleicher Fehler



  • Sind XERCES_NEW_IOSTREAMS und XERCES_CPP_NAMESPACE_USE definiert? schreib mal vor das erste cout explizit std::.

    Diese Apache-Typen gehen mit ihrem Oldie-Compiler-Support einem mächtig auf die Nüsse.



  • Zeile 22 is ok, aber der Fehler springt einen in Zeile 23 regelrecht an.

    << message << "\n"; <
                XMLString::release(&message);
    

    Wenn Du den jetzt immer noch nicht siehst...



  • Hähä, stimmt. 😃





  • So, der Fehler ist nun behoben aber funktionieren tut das Programm leider noch nicht

    undefined reference to \_imp\_\_\_Q211xercesc\_2\_76XMLUni$fgXercescDefaultLocale' undefined reference toimport stub for xercesc_2_7::XMLPlatformUtils::Initialize(char const *, char const *
    undefined reference to `import stub for xercesc_2_7::XMemory::operator new(unsigned int)

    Um nur einige zu nennen. Ich hab das Gefühl, der Quellcode ist nicht so das Gelbe vom Ei



  • C++ ist keine Sprache in der man Copy & Paste machen kann.

    Du hast hier entweder die Lip nicht eingebunden oder notwendige .cpp Dateien nicht als Objekt vorliegen.

    Die Doku Deines Compilers kann Dir hier sicherlich weiterhelfen.



  • Du hast anscheinend noch keine ausreichenden C++-Kenntnisse die über Anfängererfahrung hinaus gehen. Denn das Programm selbst ist erfolgreich kompiliert. Warum? Weil jetzt "nur" noch Linker-Errors auftauchen. Und der Linker wird für gewöhnlich erst dann bemüht, wenn der Compiler erfolgreich kompilierte. Du hast bestimmt vergessen die Lib mit anzugeben.



  • Vollkommen richtig, interessiert aber meinen Chef realtiv wenig. Er weiss das. Ich soll trotzdem einen mit Xerces C++ basierten XML Validation Parser bauen. Dazu fehlen mir sowohl Kenntnisse in XML, Xerces und die nötigen C++ Kenntnisse wieso ich hier im Forum bin.

    Wüsste ich wie es geht, wär ich nicht hier...



  • Du wirst für die Arbeit bezahlt, nicht die Leute im Forum.

    Hier erhälst Du nur Hilfestellung. Mit der Info die Du gegeben
    hast ist die Information, das Du vermutlich die Libs vergessen hast die passende Antwort.

    Wenn Du jemand suchst, der für Dich den Parser baut, schau Dich mal im Projekteforum um.



  • Hey, wir sind nicht diejenigen, die einfach so einen sourcecode gepostet haben und gesagt haben "So, nun macht mal!". Weiterhin habe ich in meinm letzten Posting auch versucht zu ERKLÄREN wie der Buildvorgang von C++ arbeitet. Wenn du etwas nicht verstehst, frage KONKRET nach!!! WAS weißt du nicht? WAS ist dir unklar? Gib uns Informationen, damit wir eine Antwort geben können. Wir wollen nicht raten, was du nicht weißt. Du mußt uns sagen, was du nicht weißt.



  • Naja, mich würde interessieren was dieses Xerces überhaupt richtig ist, wie es funktioniert. Was brauche ich dazu ? Gibt es irgendwo fertige Beispiele, Tutorials, Dokumente die nicht von Apache kommen ? Bücher ?

    Ich will das einigermaßen verstehen, bekomme aber hier im Geschäft 0 Hilfestellung, finde kaum was im Internet was weiter hilft, kenne mich mit Xerces 0 aus.



  • Bist du blind? Ich habe dir bereits ein Buch genannt.



  • Im "C++ Cookbook" von O'Reilly gibts auch ein Kapitel nur über XML, da wird auch Xerces behandelt, wobei ich aber glaube dass das weiter oben genannte Buch dir wohl mehr bringen wird (da geht es ja ausschließlich um XML)


Anmelden zum Antworten