Mit Xerces-C++ gegen Schema validieren



  • Hallo! Ich möchte eine xml Datei gegen eine xsd Datei validieren. Aus der Doku habe ich schon einiges gefunden, aber anscheinend habe ich eine Kleinigkeit vergessen. Mein Code lässt sich wunderbar ausführen, jedoch gibt er keine Fehler aus wenn das Schema nicht zu der XML Datei passt.

    Wie kann ich xerces sagen, dass Fehler auf stdout ausgegeben werden sollen?

    #include <iostream>
    
    #include <xercesc/sax2/XMLReaderFactory.hpp>
    #include <xercesc/sax2/SAX2XMLReader.hpp>
    #include <xercesc/sax2/DefaultHandler.hpp>
    #include <xercesc/validators/common/Grammar.hpp>
    #include <xercesc/util/XMLUni.hpp>
    
    XERCES_CPP_NAMESPACE_USE
    
    int main(int argc, char **argv)
    {
        try
        {
            XMLPlatformUtils::Initialize();
        }
        catch( XMLException& e )
        {
            char* message = XMLString::transcode( e.getMessage() );
            std::cerr << "XML toolkit initialization error: " << message << std::endl;
            XMLString::release( &message );
        }
    
        SAX2XMLReader* parser = xercesc::XMLReaderFactory::createXMLReader();
        parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true);
        parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
        parser->setFeature(XMLUni::fgXercesDynamic, false);
        parser->setFeature(XMLUni::fgXercesSchema, true);
        parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true);
    
        parser->loadGrammar(argv[2], Grammar::SchemaGrammarType, true);
        parser->setFeature(XMLUni::fgXercesUseCachedGrammarInParse, true);
    
        DefaultHandler handler;
        parser->setContentHandler(&handler);
        parser->setErrorHandler(&handler);
        parser->setEntityResolver(&handler);
        parser->parse(argv[1]);
    
        delete parser;
    
        return 0;
    }
    

Anmelden zum Antworten