Как проверить XML, используя встроенный DTD, используя libxml2 (SAX-парсер)?

Я пишу синтаксический анализатор XML на C++, используя библиотеку libxml, которая требует от меня проверки XML на соответствие DTD, которое указано встроенным. Я не хочу использовать system() в моей программе. В противном случае я мог бы использовать команду xmllint.

Я столкнулся с функцией xmlValidateDtd(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlDtdPtr dtd), указанной на странице http://xmlsoft.org/ API. Но я чувствую, что это основанная на DOM функция, так как в SAX-анализе нет xmlDocPtr.

Существуют ли другие методы для проверки документа XML на соответствие встроенному DTD?

1 ответ

Решение

Обычно вы просто предоставляете XML_PARSE_DTDVALID опция парсера, поэтому документ будет проверен при разборе.

Если документ уже был проанализирован без проверки, вы можете использовать xmlValidateDocument:

int xmlValidateDocument (xmlValidCtxtPtr ctxt, 
                         xmlDocPtr doc)

Попробуйте проверить экземпляр документа, в основном он выполняет все проверки, описанные в XML Rec, т. Е. Проверяет внутреннее и внешнее подмножество (если имеется) и проверяет дерево документа.

ctxt: контекст проверки
doc: экземпляр документа
Returns: 1, если действует или 0 в противном случае

Другие вопросы по тегам