前面文章已经介绍了XML文件的DOM解析方法, 这篇文章简单说明一下写入.
我自己用fprintf封装了几个函数, 具体如下, 很容易看懂:
cs_xml.h
#ifndef CS_XML_H
#define CS_XML_H
#include <stdio.h>
/* Add a node and a value(string) to XML */
int xml_add_node_val_str(FILE *fp, const char *node, char val[], int tabs);
/* Add a node and a value(char) to XML */
int xml_add_node_val_char(FILE *fp, const char *node, char c, int tabs);
/* Add a node and a value(long) to XML */
int xml_add_node_val_long(FILE *fp, const char *node, long n, int tabs);
/* Add a node to XML */
int xml_add_node(FILE *fp, const char *node, int tabs);
#endif
#define CS_XML_H
#include <stdio.h>
/* Add a node and a value(string) to XML */
int xml_add_node_val_str(FILE *fp, const char *node, char val[], int tabs);
/* Add a node and a value(char) to XML */
int xml_add_node_val_char(FILE *fp, const char *node, char c, int tabs);
/* Add a node and a value(long) to XML */
int xml_add_node_val_long(FILE *fp, const char *node, long n, int tabs);
/* Add a node to XML */
int xml_add_node(FILE *fp, const char *node, int tabs);
#endif
cs_xml.c
#include <stdio.h>
#include "cs_xml.h"
/* Add a node and a value(string) to XML */
int xml_add_node_val_str(FILE *fp, const char *node, char val[], int tabs)
{
int ret = 0; /* Return value */
int i = 0; /* Index */
while (i < tabs)
{
if (fputc(' ', fp) == EOF)
{
ret = -1;
break;
}
i++;
}
fprintf(fp, "<%s>%s</%s> ", (char *)node, (char *)val, (char *)node);
return 0;
}
/* Add a node and a value(char) to XML */
int xml_add_node_val_char(FILE *fp, const char *node, char c, int tabs)
{
int ret = 0; /* Return value */
int i = 0; /* Index */
while (i < tabs)
{
if (fputc(' ', fp) == EOF)
{
ret = -1;
break;
}
i++;
}
fprintf(fp, "<%s>%c</%s> ", (char *)node, c, (char *)node);
return 0;
}
/* Add a node and a value(long) to XML */
int xml_add_node_val_long(FILE *fp, const char *node, long n, int tabs)
{
int ret = 0; /* Return value */
int i = 0; /* Index */
while (i < tabs)
{
if (fputc(' ', fp) == EOF)
{
ret = -1;
break;
}
i++;
}
fprintf(fp, "<%s>%ld</%s> ", (char *)node, n, (char *)node);
return 0;
}
/* Add a node to XML */
int xml_add_node(FILE *fp, const char *node, int tabs)
{
int ret = 0; /* Return value */
int i = 0; /* Index */
while (i < tabs)
{
if (fputc(' ', fp) == EOF)
{
ret = -1;
break;
}
i++;
}
fprintf(fp, "<%s> ", (char *)node);
return 0;
}
#include "cs_xml.h"
/* Add a node and a value(string) to XML */
int xml_add_node_val_str(FILE *fp, const char *node, char val[], int tabs)
{
int ret = 0; /* Return value */
int i = 0; /* Index */
while (i < tabs)
{
if (fputc(' ', fp) == EOF)
{
ret = -1;
break;
}
i++;
}
fprintf(fp, "<%s>%s</%s> ", (char *)node, (char *)val, (char *)node);
return 0;
}
/* Add a node and a value(char) to XML */
int xml_add_node_val_char(FILE *fp, const char *node, char c, int tabs)
{
int ret = 0; /* Return value */
int i = 0; /* Index */
while (i < tabs)
{
if (fputc(' ', fp) == EOF)
{
ret = -1;
break;
}
i++;
}
fprintf(fp, "<%s>%c</%s> ", (char *)node, c, (char *)node);
return 0;
}
/* Add a node and a value(long) to XML */
int xml_add_node_val_long(FILE *fp, const char *node, long n, int tabs)
{
int ret = 0; /* Return value */
int i = 0; /* Index */
while (i < tabs)
{
if (fputc(' ', fp) == EOF)
{
ret = -1;
break;
}
i++;
}
fprintf(fp, "<%s>%ld</%s> ", (char *)node, n, (char *)node);
return 0;
}
/* Add a node to XML */
int xml_add_node(FILE *fp, const char *node, int tabs)
{
int ret = 0; /* Return value */
int i = 0; /* Index */
while (i < tabs)
{
if (fputc(' ', fp) == EOF)
{
ret = -1;
break;
}
i++;
}
fprintf(fp, "<%s> ", (char *)node);
return 0;
}
这个是在项目中使用到的, 从数据库表中读出数据, 写到XML中, 再由中间件输出到其他服务器/客户端上.
由于读出的数据有char *, 有char, 有long(int)型, 因此封装了不同的函数, 还可以另行添加更多适应类型函数.
671

被折叠的 条评论
为什么被折叠?



