【发布时间】:2017-03-01 22:07:14
【问题描述】:
我正在尝试使用 Xerces-C 来解析带有验证 XSD 或 DTD 的 XML。不幸的是,没有报告验证错误。以下是我的设置方式:
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 方法被调用:
void XMLValidator::emitError(const XMLValid::Codes toEmit
, const XMLCh* const text1
, const XMLCh* const text2
, const XMLCh* const text3
, const XMLCh* const text4)
但是,它到了这里:
if (fErrorReporter)
但 fErrorReporter 为空,因此没有报告任何内容。我想安装一个错误报告器(它是 XMLErrorReporter 类型),我可以在其中跟踪消息和/或抛出我自己的异常,但我不知道该怎么做。
我可以调用 saxParser->getErrorCount() 并且它返回非零,这很好。那让我报告“发生错误!”。但是没有捕获错误文本和位置。
更新:这是 Xerces-c 3.1 版
请注意,我已阅读 this,但它似乎不适用于 SAX。
【问题讨论】:
-
也许这不是一个致命错误,而只是一个错误,您是否覆盖了所有错误报告方法?
-
是的,就是这样。
标签: xml validation xerces-c