C语言实现xml构造解析器

所属分类: 软件编程 / C 语言 阅读数: 53
收藏 0 赞 0 分享

纯C实现xml构造解析器,所有实现只有一个.c一个.h文件组成,简单易用,易于扩展。

#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;
}

更多精彩内容其他人还在看

利用C语言来求最大连续子序列乘积的方法

这篇文章主要介绍了利用C语言来求最大连续子序列乘积的方法,基本的思路以外文中还附有相关ACM题目,需要的朋友可以参考下
收藏 0 赞 0 分享

用C语言判断一个二叉树是否为另一个的子结构

这篇文章主要介绍了用C语言判断一个二叉树是否为另一个的子结构,是数据结构学习当中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现的阶乘,排列和组合实例

这篇文章主要介绍了C语言实现的阶乘,排列和组合的方法,涉及C语言数学运算的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言查找数组里数字重复次数的方法

这篇文章主要介绍了C语言查找数组里数字重复次数的方法,涉及C语言针对数组的遍历与判断技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言简单实现计算字符个数的方法

这篇文章主要介绍了C语言简单实现计算字符个数的方法,涉及C语言针对字符串的简单遍历与判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

c实现linux下的数据库备份

本文给大家简单介绍下c实现linux下的数据库备份的方法和具体的源码,十分的实用,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

C++获得文件状态信息的方法

这篇文章主要介绍了C++获得文件状态信息的方法,包括文件状态信息、文件所在磁盘盘符、文件创建时间、访问时间及修改日期等,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言按关键字搜索文件夹中文件的方法

这篇文章主要介绍了C语言按关键字搜索文件夹中文件的方法,涉及C语言文件操作及字符串查找的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言之字符串模糊查询方法的实现

本篇文章主要为大家介绍字符串模糊查询的C语言程序编写方法,有需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现BMP转换JPG的方法

这篇文章主要介绍了C语言实现BMP转换JPG的方法,涉及C#图片格式转换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多