3

私のソフトウェアでは、libxml2 を使用して (明らかに) XML データ構造を操作しています。私は主に XSD スキーマ検証を使用していますが、これまでのところうまく機能しています。

クライアントによって入力されたデータ構造が XSD スキーマと一致しない場合、libxml2 はいくつかのデバッグ メッセージをコンソールに出力します。

次に例を示します。

/data/file_name:5230: パーサー エラー: StartTag: 無効な要素名 < ^

これらの文字列はデバッグ目的には役立ちますが、それらが表示されて、最終的なアプリのコンソール出力を汚染することは望ましくありません。これまでのところ、これを行う公式の方法を見つけることができませんでした。ただし、ライブラリ自体を変更する方法は 1 つありますが、コードを変更せずにそれを行うライブラリ構成を探しています。

デバッグ出力を抑制する方法、または (さらに良い) カスタム関数にリダイレクトする方法を知っていますか?

平和とよろしく。

4

1 に答える 1

3

必要な方法で警告とエラーを出力するためのコールバック メカニズムがあります。

API ドキュメントで述べたように、xmlSchemaSetParserErrors() Set the callback functions used to handle errors for a validation context.

定義された署名に関して、2 つのコールバック関数を記述する必要があります。

例は次のとおりです。

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 に答える