2012-08-10 101 views
1

在我的软件中,我使用libxml2来处理(显然)XML数据结构。我主要使用XSD模式验证,到目前为止,它运行良好。LIBXML2:在控制台上禁止调试输出

当客户端输入的数据结构与XSD架构不匹配时,libxml2会向控制台输出一些调试消息。

下面是一个例子:

/数据/ FILE_NAME:5230:分析器错误:开始标记:无效的元素名称 < ^

虽然这些字符串用于调试,我不想他们出现并在最终的应用程序中监视控制台输出。到目前为止,我找不到这样做的官方方式。尽管我确实有一种修改库本身的方法,但我正在寻找一种库配置,即不修改代码。

你知道如何抑制调试输出或(甚至更好)将其重定向到自定义函数吗?

和平&问候。

回答

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()