We've tried the above code and it does not validate the XML file. All it does
is check that it is well formed. Here is the hacked code:
/* initialize xerces system before usig API: DOM, SAX, SAX2 */
try {
xercesc::XMLPlatformUtils::Initialize();
}
catch (const XMLException &e) {
char *message = XMLString::transcode(e.getMessage());
//qDebug() << "Error during XML initialization: " << message <<
endl;
XMLString::release(&message);
//return;
}
/* actual xerces work */
char *xml_file = "D:\\Development\\Chronicle\\Example Schemas and Form
Templates\\DrillData_1.xml";
char *xml_schema = "D:\\Development\\Chronicle\\Example Schemas and Form
Templates\\newDrillData.xsd";
SAXParser *parser = new SAXParser();
CSaxParserErrorHandler errorHandler;
parser->setErrorHandler(&errorHandler);
//parser->setDoValidation(true);
parser->setDoNamespaces(true);
try
{
parser->setExternalSchemaLocation(xml_schema);
parser->parse(xml_file);
return true;
}
catch (const XMLException &e)
{
char *message = XMLString::transcode(e.getMessage());
//qDebug() << "XML Exception is: " << message << endl;
XMLString::release(&message);
}
catch(...)
{
//qDebug() << "XML Unexpected exception" << endl;
}
delete parser;
//delete doc_handler;
/* terminate and cleanup */
XMLPlatformUtils::Terminate();
The XML file purposefully has an extra element which is not allowed by the
schema. But the parser accepts it.
Here is the quickly knocked together error handler:
class CSaxParserErrorHandler : public xercesc_3_0::ErrorHandler
{
virtual void warning(const SAXParseException& exc);
virtual void error(const SAXParseException& exc);
virtual void fatalError(const SAXParseException& exc);
void resetErrors()
{
}
};
void CSaxParserErrorHandler::warning(const SAXParseException& exc)
{
CReport::Warning(
"File: %s, line %d, column %d : %s",
StrX(exc.getSystemId()),
(int)exc.getLineNumber(),
(int)exc.getLineNumber(),
StrX(exc.getMessage()));
}
void CSaxParserErrorHandler::error(const SAXParseException& exc)
{
CReport::Error(
"File: %s, line %d, column %d : %s",
StrX(exc.getSystemId()),
(int)exc.getLineNumber(),
(int)exc.getLineNumber(),
StrX(exc.getMessage()));
}
void CSaxParserErrorHandler::fatalError(const SAXParseException& exc)
{
CReport::Error(
"(Fatal Error) File: %s, line %d, column %d : %s",
StrX(exc.getSystemId()),
(int)exc.getLineNumber(),
(int)exc.getLineNumber(),
StrX(exc.getMessage()));
}
--
View this message in context:
http://www.nabble.com/validating-xml-with-xsd-schema-tp23315036p23505306.html
Sent from the Xerces - C - Dev mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]