有一种回调机制可以按照您想要的方式输出警告和错误。
正如 API 文档中所说,xmlSchemaSetParserErrors() Set the callback functions used to handle errors for a validation context.
您需要针对定义的签名编写两个回调函数:
一个例子可能是:
void err(void *ctx, const char *msg, ...)
{
char buf[1024];
va_list args;
va_start(args, msg);
int len = vsnprintf_s(buf, sizeof(buf), sizeof(buf)/sizeof(buf[0]), msg, args);
va_end(args);
if(len==0) // Can't create schema validity error!
else // Do something to store `buf`,
// you may need to use void *ctx to achieve this
return;
}
然后打电话
xmlSchemaSetValidErrors(valid_ctxt_ptr, (xmlSchemaValidityErrorFunc) err, (xmlSchemaValidityWarningFunc) warn, ctx);
打电话之前
xmlSchemaValidateDoc()