C语言实现xml构造解析器

前端技术 2023/09/04 C++

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

本文地址:https://www.stayed.cn/item/9077

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。