根据ANSI C中的relax ng验证xml
是否可以根据ANSI C中的RELAXNG模式验证xml文件?我曾经遇到过一个名为libxml2的库,但我能从中得到的所有帮助都是关于如何解析xml文件的。请帮忙根据ANSI C中的relax ng验证xml,c,xml,relaxng,C,Xml,Relaxng,是否可以根据ANSI C中的RELAXNG模式验证xml文件?我曾经遇到过一个名为libxml2的库,但我能从中得到的所有帮助都是关于如何解析xml文件的。请帮忙 如果可以,步骤是什么?完全不知道这个w.r.t.和C环境 我不能很快给出一个源代码示例来回答您的问题,但是您需要的答案可以在作为libxml2实用程序一部分的xmllint实用程序的源代码中找到。在上有大量关于libxml2的开发人员文档,您可以从中浏览或下载xmllint的源代码。查看streamFile函数中的代码(第1800行左
如果可以,步骤是什么?完全不知道这个w.r.t.和C环境 我不能很快给出一个源代码示例来回答您的问题,但是您需要的答案可以在作为libxml2实用程序一部分的xmllint实用程序的源代码中找到。在上有大量关于libxml2的开发人员文档,您可以从中浏览或下载xmllint的源代码。查看streamFile函数中的代码(第1800行左右)这里是一个简单的示例(当然,您应该添加自己的错误检查):
#包括
#包括
#包括
#包括
#包括
#包括
int
main(int argc,char*argv[])
{
智力状态;
xmlDoc*doc;
xmlRelaxNGPtr模式;
xmlRelaxngValidCxtPtr ValidCxt;
xmlRelaxngParserCxtPtr rngparser;
doc=xmlParseFile(argv[1]);
rngparser=xmlRelaxNGNewParserCtxt(argv[2]);
schema=xmlRelaxNGParse(rngparser);
ValidCxt=xmlRelaxngNewValidCxt(模式);
状态=xmlRelaxNGValidateDoc(validText,doc);
printf(“状态==%d\n”,状态);
xmlRelaxNGFree(模式);
xmlRelaxNGFreeValidCtxt(validctxt);
xmlRelaxNGFreeParserCtxt(rngparser);
xmlFreeDoc(doc);
退出(退出成功);
}
使用gcc-I/usr/include/libxml2 rngval.c-o rngval-lxml2编译此文件
您可以在Jmbr查看相关文档,非常感谢。我现在就要试试这个。非常感谢。除此之外,我的疑问是,如何读取预先存在的RELAXNG模式和xml文件?我的意思是,我如何将这两个作为输入-我已经有了文件-xml和模式文件。我不确定这是否是您的意思,但您可以运行我发布的程序,并使用两个命令行参数作为./rngval file.xml rngschema.xml,如果file.xml对rngschema.xml有效,则变量状态应等于零。希望这能帮上忙。明白了,明白了。再次感谢。我有点困惑。
#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);
}