2010-03-16 2 views
0

Я хочу загрузить XML-документ в Xerces-C++ (версия 2.8 под Linux) и проверить его с помощью схемы DTD, не связанной с документом. Я пробовал следующее:Проверка документа в Xerces C++

XercesDOMParser parser; 
parser.loadGrammar("grammar.dtd", Grammar::DTDGrammarType); 
parser.setValidationScheme(XercesDOMParser::Val_Always); 
parser.parse("xmlfile.xml"); 

Но это не указывает на ошибку, если документ недействителен. Что мне не хватает?

ответ

2

Вам нужно set an error handler перед вызовом разобрана, если вы хотите увидеть что-нибудь:

Handler handler;  
parser.setErrorHandler(&handler); 

где Handler является класс, производный от ErrorHandler

+0

Я добавил обработчик ошибок в коде. Теперь отчет об ошибках работает. Однако при анализе моего файла DTD я получаю сообщение об ошибке. Вот мой DTD файл: !! <ЭЛЕМЕНТ elem2 (#PCDATA)!> сообщение об ошибке <ЭЛЕМЕНТ elem1 (elem2 *)!>: фатальная ошибка: grammar.dtd: 2,3: Ожидаемое объявление разметки – petersohn

+0

@petersohn: ваше DTD не указывает, какой атрибут attr1 является [значением | ТРЕБУЕМЫЙ | ПОДРАЗУМЕВАЕМЫЙ | ФИКСИРОВАН] и, похоже, не имеет окончания]> В любом случае , вы можете попытаться включить mmar.dtd в xmlfile.xml и открыть XML с помощью XMLNotepad или аналогичного. –

+0

У DTD есть финал, я просто забыл скопировать его сюда. В любом случае добавление #REQUIRED к attr1 не помогает, оно дает то же сообщение об ошибке. У меня есть определенная причина не включать DTD в файл XML. Невозможно ли связать DTD с XML программно? – petersohn

Смежные вопросы