3

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

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

这是一个例子:

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

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

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

和平与问候。

4

1 回答 1

3

有一种回调机制可以按照您想要的方式输出警告和错误。

正如 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()
于 2012-08-28T16:09:04.610 回答