Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据ANSI C中的relax ng验证xml_C_Xml_Relaxng - Fatal编程技术网

根据ANSI C中的relax ng验证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行左

是否可以根据ANSI C中的RELAXNG模式验证xml文件?我曾经遇到过一个名为libxml2的库,但我能从中得到的所有帮助都是关于如何解析xml文件的。请帮忙


如果可以,步骤是什么?完全不知道这个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);
 }