Как проверить 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 в противном случае