在我的软件中,我使用libxml2来操纵(显然)XML数据结构。我主要使用XSD模式验证,到目前为止,它运行良好。
当客户端输入的数据结构与XSD架构不匹配时,libxml2会将一些调试消息输出到控制台。
以下是一个例子:
/ data / file_name:5230:解析器错误:StartTag:无效的元素名称 < ^
虽然这些字符串对于调试目的很有用,但我不希望它们出现并在最终应用程序中对控制台输出进行轮询。到目前为止,我找不到这样做的官方方法。虽然我确实有一种修改库本身的方法,但我正在寻找一种可以实现这一目的的库配置,即无需修改代码。
您知道如何抑制调试输出或(甚至更好)将其重定向到自定义函数吗?
和平& amp;问候。答案 0 :(得分:2)
有一种回调机制可以按照你想要的方式输出警告和错误。
正如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()