2012-08-10 76 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()