C语言实现xml构造解析器
纯C实现xml构造解析器,所有实现只有一个.c一个.h文件组成,简单易用,易于扩展。
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include"sxml.h"
#defineLUA_SCRIPT"functionfun()\n\
inta;\n\
a=10;\n\
returna;\n\
end"
intmain()
{
sxml_file_info_t*info;
char*tmp;
constchar*pstr;
intline=1;
charbuff[128]={0};
sxml_doc_t*parser=NULL;
sxml_doc_t*doc=sxml_doc_new("a.xml","1.0","GB2312");
sxml_node_t*node=sxml_node_new("root");
sxml_attr_t*attr=sxml_attr_new("age","25");
sxml_node_t*subnode=sxml_node_new("score");
sxml_node_t*rawdata=sxml_rawdata_new(NULL,"helloworld!",strlen("helloworld!"));
sxml_node_t*rawdata2=sxml_rawdata_new(NULL,"helloworld!",strlen("helloworld!"));
sxml_node_t*rawdata3=sxml_rawdata_new(NULL,"helloworld!",strlen("helloworld!"));
sxml_node_t*rawdata4=sxml_rawdata_new("raw","rawdata",strlen("rawdata"));
sxml_node_t*rawdata5=sxml_rawdata_new("lua",LUA_SCRIPT,strlen(LUA_SCRIPT));
sxml_node_t*innertext=sxml_innertext_new("内部字符串");
sxml_node_t*comment=sxml_comment_new("注释");
sxml_node_t*empty=sxml_empty_new("empty");
sxml_add_attr2node(node,attr);
attr=sxml_attr_new("sex","man");
sxml_add_attr2node(node,attr);
attr=sxml_attr_new("语文","95");
sxml_add_attr2node(subnode,attr);
attr=sxml_attr_new("数学","100");
sxml_add_attr2node(subnode,attr);
attr=sxml_attr_new("英语","98");
sxml_add_attr2node(subnode,attr);
sxml_add_subnode2node(node,subnode);
sxml_add_subnode2node(node,rawdata);
sxml_add_subnode2node(node,rawdata2);
sxml_add_subnode2node(node,rawdata3);
sxml_add_subnode2node(node,rawdata4);
sxml_add_subnode2node(node,rawdata5);
sxml_add_subnode2node(node,innertext);
sxml_add_subnode2node(node,comment);
sxml_add_subnode2node(node,empty);
sxml_add_node2doc(doc,node);
//printf("%s\n",sxml_doc_print_buffered(doc,16));
tmp=sxml_doc_print(doc);
pstr=tmp;
printf("%s\n",tmp);
while((pstr=skip_line(pstr)))line++;
printf("\n\n%d\n\n",line);
//printf("\n\n%s\n\n",check_skip("<?xmlversion=\"1.0\"encoding=\"GB2312\"?>","<?xmlversion=\\\"")?"YES":"NO");
//copy_until(buff,"<?xmlversion=\"1.0\"encoding=\"GB2312\"?>","\"");
//printf("\n\n%s\n\n",buff);
//sxml_save(doc);
sxml_doc_free(doc);
doc=NULL;
free(tmp);
//printf("aaaa...................\n");
//getchar();
parser=sxml_parse("a.xml");
//tmp=sxml_doc_print(parser);//有问题,内存越界
tmp=sxml_doc_print_buffered(parser,16);
printf("%s\n",tmp);
free(tmp);
sxml_save2file(parser,"b.xml");
sxml_doc_free(parser);
return0;
}