2010-05-10 3 views
1

В моем программном обеспечении я использую libxml2 и xmlsec для управления (очевидно) структурами данных XML. В основном я использую проверку схемы XSD, и до сих пор она работает хорошо.Отключить вывод отладки в libxml2 и xmlsec

Когда структура данных, введенная клиентом, не соответствует схеме XSD, libxml2 (или xmlsec) выводит на консоль некоторые отладочные строки.

Вот пример:

Entity: line 1: parser error : Start tag expected, '<' not found 
DUMMY<?xml 
^ 

Хотя эти строки полезной для целей отладки, Я не хочу, чтобы они появлялись и polute консольного вывода в выпущенном программном обеспечении. До сих пор я не мог найти официального способа сделать это.

Вы знаете, как подавить вывод отладки или (еще лучше) перенаправить его на пользовательскую функцию?

Большое спасибо.

ответ

3

Я бы исследовал функции xmlSetGenericErrorFunc() и xmlThrDefSetGenericErrorFunc(), они кажутся правильными. Однако документация ... разреженная.

Here некоторые Python код, который, кажется, чтобы использовать эти функции, чтобы отключить сообщения об ошибках, соответствующие строки выглядят следующим образом:

# dummy function: no debug output at all 
cdef void _nullGenericErrorFunc(void* ctxt, char* msg, ...) nogil: 
    pass 

# setup for global log: 

cdef void _initThreadLogging(): 
    # disable generic error lines from libxml2 
    xmlerror.xmlThrDefSetGenericErrorFunc(NULL, _nullGenericErrorFunc) 
    xmlerror.xmlSetGenericErrorFunc(NULL, _nullGenericErrorFunc) 
+0

+1: Спасибо! Конечно, документация действительно отстойная. Сегодня вечером я проверю, работает ли это. Я буду держать вас в курсе. – ereOn

+1

@ereOn: Awesome. Я добавил более общую функцию, и я нашел код примера, который должен вам помочь. Там также, похоже, много сообщений о рассылках, которые можно найти при поиске на сайте libxml. – unwind

+0

Он работает как шарм! Еще раз спасибо;) – ereOn