2012-01-04 7 views
2

私は、指定された場所にXMLファイル(XMLファイルのスキーマがあります)を作成し、そこに構造を書きたいだけです。例えばLinuxプラットフォームでCを使用してXMLファイルを動的に生成する方法は?

struct my_data 
{ 
int no; 
char *input ; 
char *output; 
char * descritpiton; 
char *time; 
}; 

"Expatの" と "のXerces" は、2つの選択肢ですが、iは、(これらのライブラリは基本的にXMLパーサーであるため)任意の構文解析のものをたくありません。だから、ちょうど1つのxmlファイルを作成するために、私は思う、これらのオプションは効率的な方法です。

ヘルプ?

答えて

2

が良く、ほとんど私がこのような状態でMXMLライブラリを使用しますが、ここであなただけのxmlファイルを作成したい、あなたが直接、同じようにそのXMLファイルを作ることができることを解析したいいけない:

このコードは、これを行います

- このよう

#include<stdio.h> 

struct my_data 
{ 
int number; 
char string[10]; 
}; 

void createdata(FILE *fb,struct my_data testData) 
{ 
fprintf (fb,"<Data>\n"); 
fprintf (fb,"<number> %d </number>\n",testData.number); 
fprintf (fb,"<string> %s </string>\n",testData.string); 
fprintf (fb,"</Data>\n"); 
} 

int main() 
{ 
FILE *fb=fopen("test.xml","w"); 
struct my_data testData = {32,"Mr.32"}; 
fprintf (fb,"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); 
createdata(fb,testData); 
return 0; 
} 

これは考えるようにあなたを助けるためだけのラフのコードです...このコードは、XMLファイル

belowsの作成します

<Data> 
<number> 32 </number> 
<string> Mr.32 </string> 
</Data> 
3

XMLはテキストです.1つのオプションは、単に必要なドキュメントを発行するだけです。問題があります(エンティティなどをエスケープする必要があります)が、ゼロオーバヘッドのアプローチです。

2

XMLライブラリは、通常、解析と生成の両方を行うことができます。

XMLファイルのシンプルさがあれば、たとえば次のように直接出力できます。 fprintf。しかし、おそらくXML文字を適切にエスケープするルーチンが必要です(<として&lt;など)。

軽いXMLライブラリを使用することをお勧めします。

2

XMLは単なるASCIIです。しかし、文字列をエンコードする必要があります。これは実装する簡単なプロセスです。必要なエンコーディングについては、http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_referencesを参照してください。

char *s = "some string that needs encoed &<>"'"; 
for (; *s; ++s) 
{ 
    switch (*s) 
    { 
     case '&': printf("&amp;"); break; 
     case '<': printf("&lt;"); break; 
     case '>': printf("&gt;"); break; 
     case '"': printf("&quot;"); break; 
     case '\'': printf("&apos;"); break; 
     default: putc(*s, stdout); break; 
    } 
} 
関連する問題