Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 验证xerces-c SAX解析器时的错误处理_Xml_Validation_Xerces C - Fatal编程技术网

Xml 验证xerces-c SAX解析器时的错误处理

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

我试图使用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方法:

然而,它在这里:

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,只是一个错误。您重写了所有的错误报告方法吗?是的,就是这样。