纯C实现xml构造解析器,所有实现只有一个.c一个.h文件组成,简单易用,易于扩展。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "sxml.h"
#define LUA_SCRIPT "function fun()\n\
int a;\n\
a = 10;\n\
return a;\n\
end"
int main()
{
sxml_file_info_t* info;
char * tmp;
const char * pstr;
int line=1;
char buff[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, "hello world!" ,strlen( "hello world!" ));
sxml_node_t* rawdata2 = sxml_rawdata_new(NULL, "hello world!" ,strlen( "hello world!" ));
sxml_node_t* rawdata3 = sxml_rawdata_new(NULL, "hello world!" ,strlen( "hello world!" ));
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("<?xml version=\"1.0\" encoding=\"GB2312\"?>","<?xml version=\\\"")?"YES":"NO");
//copy_until(buff,"<?xml version=\"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);
return 0;
}
|