2012-01-04 42 views
2

我只是想在給定位置創建一個XML文件(我有該文件的XML模式),並向其中寫入一個結構。如何在Linux平臺上使用C動態生成XML文件?

例如

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

「外籍人士」和「Xerces的」兩個選項,但我不希望任何解析的東西(由於這些庫基本都是XML解析器)。所以,要創建一個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文件

-

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

XML是文本 - 一個選擇就是發射所需要的文檔。有問題(你必須確保逃離實體等),但它的零開銷方法。

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; 
    } 
}