C語言實(shí)現(xiàn)xml構(gòu)造解析器
更新時(shí)間:2016年07月03日 15:29:37 投稿:hebedich
本文給大家分享的是使用C語言來實(shí)現(xiàn)xml構(gòu)造解析器的方法和代碼,簡(jiǎn)單易用,推薦給大家
純C實(shí)現(xiàn)xml構(gòu)造解析器,所有實(shí)現(xiàn)只有一個(gè).c一個(gè).h文件組成,簡(jiǎn)單易用,易于擴(kuò)展。
#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("內(nèi)部字符串");
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("數(shù)學(xué)","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);//有問題,內(nèi)存越界
tmp = sxml_doc_print_buffered(parser,16);
printf("%s\n", tmp);
free(tmp);
sxml_save2file(parser,"b.xml");
sxml_doc_free(parser);
return 0;
}
相關(guān)文章
C++設(shè)計(jì)模式編程之Flyweight享元模式結(jié)構(gòu)詳解
這篇文章主要介紹了C++設(shè)計(jì)模式編程的Flyweight享元模式結(jié)構(gòu),享元模式在實(shí)現(xiàn)過程中主要是要為共享對(duì)象提供一個(gè)存放的"倉庫"(對(duì)象池),需要的朋友可以參考下2016-03-03
詳解如何將Spire.XLS for C++集成到C++程序中
Spire.XLS for C++ 是一個(gè) Excel 庫,供開發(fā)人員在任何類型的 C++ 應(yīng)用程序中操作 Excel 文檔(XLS、XLSX、XLSB 和 XLSM)。 本文演示了如何以兩種不同的方式將 Spire.XLS for C++ 集成到您的 C++ 應(yīng)用程序中2023-03-03
c語言中實(shí)現(xiàn)數(shù)組幾個(gè)數(shù)求次大值
這篇文章主要介紹了c語言中實(shí)現(xiàn)數(shù)組幾個(gè)數(shù)求次大值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
VSCode 搭建 Arm 遠(yuǎn)程調(diào)試環(huán)境的步驟詳解
這篇文章主要介紹了VSCode 搭建 Arm 遠(yuǎn)程調(diào)試環(huán)境的步驟詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04

