2011-06-22 3 views
4

XMLファイルをANSI CのRelax NGスキーマに対して検証できますか?私はlibxml2と呼ばれるこのライブラリに出くわしましたが、XMLファイルを解析する方法に関して、私が得ることができるすべての助けがあります。助けてください。ANSI CのリラクゼーションNGに対するxmlの検証

それができる場合は、どのような手順ですか?これについて全く知らない。 C環境。

答えて

5

は最小限の例である(ライン1800の周り)streamFile関数のコードを見てみましょう(あなたはもちろん、独自のエラーチェックを追加する必要があります):

#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 /含める/ libxml2のrngval.c -o rngval -lxml2

あなたはhttp://xmlsoft.org/html/libxml-relaxng.html

+0

Jmbr、 本当にありがとうございます。私は今これを試してみるつもりです。本当にありがとう。 – Gyandeep

+0

これに加えて、既存のRelax ngスキーマとxmlファイルをどうやって読むのでしょうか?つまり、私はこれらの2つを入力としてどのように取るのですか?私はすでにXMLファイルとスキーマファイルを持っています。 – Gyandeep

+0

これはあなたが意味するものなのかどうかは分かりませんが、プログラムを実行するには2つのコマンドライン引数を./rngval file.xml rngschema.xmlとして投稿してください。その後、file.xmlが有効な場合、変数statusは0になります。 rngschema.xmlに関して。お役に立てれば。 – jmbr

1

私はすぐにあなたの質問に答えるために、ソースコードの例を与えることはできませんが、あなたが必要な答えはlibxml2のユーティリティの一部ですxmllintユーティリティのソースで見つけることができます。 libxml 2の開発者向けドキュメントの多くはhttp://xmlsoft.org/docs.htmlにあり、GIT repoからxmllintのソースコードを参照またはダウンロードできます。ここで

+0

本当にありがとうございましたニックに関連する文書を確認することができます。あなたの助けに感謝。どうもありがとう。 – Gyandeep

関連する問題