如何在Linux平台上使用C动态生成XML文件?

时间:2012-01-04 06:44:34

标签: c xml xsd xml-parsing

我只想在给定位置创建一个XML文件(我有文件的XML架构),并在其中写入一个结构。

例如

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

“Expat”和“Xerces”是两个选项,但我不想要任何解析内容(因为这些库基本上是xml解析器)。所以,要创建一个xml文件,我不认为,这些选项是一种有效的方式。

任何帮助?

4 个答案:

答案 0 :(得分:3)

XML是文本 - 一个选项只是发出所需的文档。有问题(你必须确保转义实体等),但它是零开销的方法。

答案 1 :(得分:2)

XML库通常可以同时进行解析和生成。

如果您的XML文件足够简单,您可以直接输出它们,例如: fprintf。但是,您可能需要一个例程来适当地转义XML字符(<&lt;等...)。

我建议仍然使用一些轻量级XML库。

答案 2 :(得分: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;
   }
}

答案 3 :(得分: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;
}

这只是ruff代码,可以帮助您思考...此代码在xml文件下面生成

-

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