我只想在给定位置创建一个XML文件(我有文件的XML架构),并在其中写入一个结构。
例如
struct my_data
{
int no;
char *input ;
char *output;
char * descritpiton;
char *time;
};
“Expat”和“Xerces”是两个选项,但我不想要任何解析内容(因为这些库基本上是xml解析器)。所以,要创建一个xml文件,我不认为,这些选项是一种有效的方式。
任何帮助?
答案 0 :(得分:3)
XML是文本 - 一个选项只是发出所需的文档。有问题(你必须确保转义实体等),但它是零开销的方法。
答案 1 :(得分:2)
XML库通常可以同时进行解析和生成。
如果您的XML文件足够简单,您可以直接输出它们,例如: fprintf
。但是,您可能需要一个例程来适当地转义XML字符(<
为<
等...)。
我建议仍然使用一些轻量级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("&"); break;
case '<': printf("<"); break;
case '>': printf(">"); break;
case '"': printf("""); break;
case '\'': printf("'"); 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>