Как динамически генерировать XML-файл, используя C на платформе Linux? - PullRequest
2 голосов
/ 04 января 2012

Я просто хочу создать файл XML (у меня есть схема XML для файла) в заданном месте и записать в него структуру.

Например,

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

"Expat "и" Xerces "- два варианта, но я не хочу ничего разбирать (так как эти библиотеки в основном являются парсерами xml).Таким образом, просто создать один XML-файл , я не думаю, что эти варианты являются эффективным способом.

Любая помощь?

Ответы [ 4 ]

3 голосов
/ 04 января 2012

XML - это текст - один из вариантов - просто создать нужный документ.Есть проблемы (вы должны убедиться, что вы не используете сущности и т. Д.), Но это подход с нулевыми издержками.

2 голосов
/ 04 января 2012

ну, в основном, я использую библиотеку 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> 
2 голосов
/ 04 января 2012

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;
   }
}
2 голосов
/ 04 января 2012

Библиотеки XML обычно могут выполнять как анализ, так и генерацию.

Если ваши XML-файлы достаточно просты, вы можете вывести их напрямую, например, с помощью. fprintf. Но тогда вам, вероятно, понадобится подпрограмма для правильного экранирования символов XML (< как &lt; и т. Д.).

Я бы по-прежнему рекомендовал использовать легкую библиотеку XML.

...