Xml 验证xerces-c SAX解析器时的错误处理
我试图使用Xerces-C来解析带有验证XSD或DTD的XML。不幸的是,没有报告验证错误。下面是我如何设置它的:Xml 验证xerces-c SAX解析器时的错误处理,xml,validation,xerces-c,Xml,Validation,Xerces C,我试图使用Xerces-C来解析带有验证XSD或DTD的XML。不幸的是,没有报告验证错误。下面是我如何设置它的: saxParser = new MySAXParser; saxParser->setDoNamespaces(true); saxParser->setValidationScheme(MySAXParser::Val_Auto); saxParser->setDoSchema(true); saxParser->setValidationConstrai
saxParser = new MySAXParser;
saxParser->setDoNamespaces(true);
saxParser->setValidationScheme(MySAXParser::Val_Auto);
saxParser->setDoSchema(true);
saxParser->setValidationConstraintFatal(true);
saxParser->setExitOnFirstFatalError(true);
MySAXErrorHandler handler;
saxParser->setErrorHandler(&handler);
saxParser->parse(...);
不幸的是,从未调用我的错误处理程序的此方法:
virtual void fatalError(const XN::SAXParseException &exc) { throw exc; }
发生验证错误时,将调用内部Xerces方法:
然而,它在这里:
if (fErrorReporter)
但fErrorReporter为空,因此未报告任何内容。我想安装一个error reporter(类型为XMLErrorReporter),在这里我可以跟踪消息和/或抛出我自己的异常,但我不知道如何做到这一点
我可以调用saxParser->getErrorCount(),它返回非零,这很好。让我报告“有一个错误!”。但是没有捕获错误文本和位置
更新:这是Xerces-c版本3.1
注意,我已经读过了,但它似乎不适用于SAX。Derp,这是我的错误。我的错误处理程序对象是使用以下内容生成的:
class MySAXErrorHandler : public HandlerBase {
public:
virtual void fatalError(const SAXParseException &exc) { throw exc; }
};
结构错误通过fatalError()报告,验证错误通过error()报告。HandlerBase类有一个默认的error()实现,即“不做任何事情”。除了fatalError()之外,重写error()解决了问题。Derp,这是我的错误。我的错误处理程序对象是使用以下内容生成的:
class MySAXErrorHandler : public HandlerBase {
public:
virtual void fatalError(const SAXParseException &exc) { throw exc; }
};
结构错误通过fatalError()报告,验证错误通过error()报告。HandlerBase类有一个默认的error()实现,即“不做任何事情”。除了fatalError()之外,重写error()解决了这个问题。可能不是fatalError,只是一个错误。您重写了所有的错误报告方法吗?是的,就是这样。可能不是fatalError,只是一个错误。您重写了所有的错误报告方法吗?是的,就是这样。