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");
Но это не указывает на ошибку, если документ недействителен. Что мне не хватает?
Я добавил обработчик ошибок в коде. Теперь отчет об ошибках работает. Однако при анализе моего файла DTD я получаю сообщение об ошибке. Вот мой DTD файл: XML версия = "1,0" кодировка = "UTF-8"?> !! <ЭЛЕМЕНТ elem2 (#PCDATA)!> сообщение об ошибке <ЭЛЕМЕНТ elem1 (elem2 *)!>: фатальная ошибка: grammar.dtd: 2,3: Ожидаемое объявление разметки –
petersohn
@petersohn: ваше DTD не указывает, какой атрибут attr1 является [значением | ТРЕБУЕМЫЙ | ПОДРАЗУМЕВАЕМЫЙ | ФИКСИРОВАН] и, похоже, не имеет окончания]> В любом случае , вы можете попытаться включить mmar.dtd в xmlfile.xml и открыть XML с помощью XMLNotepad или аналогичного. –
У DTD есть финал, я просто забыл скопировать его сюда. В любом случае добавление #REQUIRED к attr1 не помогает, оно дает то же сообщение об ошибке. У меня есть определенная причина не включать DTD в файл XML. Невозможно ли связать DTD с XML программно? – petersohn