Проверка xml на расслабление в ANSI C - PullRequest
5 голосов
/ 22 июня 2011

Можно ли проверить файл xml по схеме Relax NG в ANSI C? Я сталкивался с этой библиотекой под названием libxml2, но вся помощь, которую я мог получить от нее, связана с тем, как анализировать файл XML. Пожалуйста помоги.

А если это можно сделать, какие шаги? Совершенно неосведомленный об этом w.r.t. С среда.

Ответы [ 2 ]

6 голосов
/ 22 июня 2011

Вот минималистичный пример (вы, конечно, должны добавить свою собственную проверку ошибок):

 #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

Вы можете проверить соответствующую документацию на http://xmlsoft.org/html/libxml-relaxng.html

1 голос
/ 22 июня 2011

Я не могу быстро привести пример исходного кода, чтобы ответить на ваш вопрос, но ответы, которые вам нужны, можно найти в источнике для утилиты xmllint, которая является частью утилиты libxml2.Существует большая документация для разработчиков для libxml 2 по адресу http://xmlsoft.org/docs.html, и вы можете просмотреть или загрузить исходный код для xmllint из GIT repo .Посмотрите на код в функции streamFile (около 1800)

...