是否可以针对 ANSI C 中的 Relax NG 模式验证 xml 文件?我遇到了这个名为 libxml2 的库,但我可以从中获得的所有帮助都是关于如何解析 xml 文件。请帮忙。
如果可以做到,步骤是什么?在 C 环境中对此一无所知。
这是一个简约的示例(您当然应该添加自己的错误检查):
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
#include <libxml/relaxng.h>
int
main(int argc, char *argv[])
{
int status;
xmlDoc *doc;
xmlRelaxNGPtr schema;
xmlRelaxNGValidCtxtPtr validctxt;
xmlRelaxNGParserCtxtPtr rngparser;
doc = xmlParseFile(argv[1]);
rngparser = xmlRelaxNGNewParserCtxt(argv[2]);
schema = xmlRelaxNGParse(rngparser);
validctxt = xmlRelaxNGNewValidCtxt(schema);
status = xmlRelaxNGValidateDoc(validctxt, doc);
printf("status == %d\n", status);
xmlRelaxNGFree(schema);
xmlRelaxNGFreeValidCtxt(validctxt);
xmlRelaxNGFreeParserCtxt(rngparser);
xmlFreeDoc(doc);
exit(EXIT_SUCCESS);
}
用 gcc -I/usr/include/libxml2 rngval.c -o rngval -lxml2 编译它
我无法快速给出源代码示例来回答您的问题,但您需要的答案可以在作为 libxml2 实用程序一部分的 xmllint 实用程序的源代码中找到。在http://xmlsoft.org/docs.html上有大量关于 libxml 2 的开发人员文档,您可以从GIT存储库浏览或下载 xmllint 的源代码。看一下 streamFile 函数中的代码(大约 1800 行)