LIBXML2:在控制台上禁止调试输出

时间:2012-08-10 11:58:55

标签: xml xml-parsing xsd libxml2

在我的软件中,我使用libxml2来操纵(显然)XML数据结构。我主要使用XSD模式验证,到目前为止,它运行良好。

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

以下是一个例子:

/ data / file_name:5230:解析器错误:StartTag:无效的元素名称           <            ^

虽然这些字符串对于调试目的很有用,但我不希望它们出现并在最终应用程序中对控制台输出进行轮询。到目前为止,我找不到这样做的官方方法。虽然我确实有一种修改库本身的方法,但我正在寻找一种可以实现这一目的的库配置,即无需修改代码。

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

和平& amp;问候。

1 个答案:

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