C语言实现xml构造解析器

纯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;
}
(0)

相关推荐

  • 解析web.xml中在Servlet中获取context-param和init-param内的参数

    web.xml里面可以定义两种参数:1.application范围内的参数,存放在servletcontext中,在web.xml中配置如下: 复制代码 代码如下: <context-param>           <param-name>context/param</param-name>           <param-value>avalible during application</param-value>  </contex

  • C++调用迅雷接口解析XML下载功能(迅雷下载功能)

    迅雷下载库的网址:http://thunderplatform.xunlei.com 复制代码 代码如下: // FileName: Download.h#pragma once#include "lib\XLDownload.h"#include "lib\XLError.h"#include <vector> // 下载队列的大小,决定同时开启下载线程的数量const int LIMIT = 2; struct Down{    // 解析出来的下载

  • VC解析XML文件-CMarkup的使用详解

    VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等.据说tinyXML很好,可能字符集问题,我编译不了.所以就用CMarkup来解析,使用过后,觉得非常不错,使用起来很方便.CMarkup下载地址:http://www.firstobject.com/发现网上有方法很法,我就摘下来了 复制代码 代码如下: //----------UserInfo.xml--------------    xml version="1.0" encoding=&q

  • C语言实现xml构造解析器

    纯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_fi

  • PHP XML Expat解析器知识点总结

    内建的 Expat 解析器使在 PHP 中处理 XML 文档成为可能. 什么是 XML? XML 用于描述数据,其焦点是数据是什么.XML 文件描述了数据的结构. 在 XML 中,没有预定义的标签.您必须定义自己的标签. 什么是 Expat? 如需读取和更新 - 创建创建并处理 - 一个 XML 文档,您需要 XML 解析器. 有两种基本的 XML 解析器类型: 基于树的解析器:这种解析器把 XML 文档转换为树型结构.它分析整篇文档,并提供了 API 来访问树种的元素,例如文档对象模型 (DO

  • C++实现xml解析器示例详解

    目录 xml格式简单介绍 xml格式解析过程浅析 代码实现 实现存储解析数据的类——Element 关键代码1——实现整体的解析 关键代码2——解析所有元素 开发技巧 有关C++的优化 额外注意 xml格式简单介绍 <?xml version="1.0"?> <!--这是注释--> <workflow> <work name="1" switch="on"> <plugin name=&quo

  • tinyxml 常用的C++ XML解析器非常优秀

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译.这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树. DOM模型即文档对象模型,是将整个文档分成多个元素(如书.章.节.段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包

  • 实例解析Android中使用Pull解析器解析XML的方法

    1.Pull简介 Pull解析器是Android系统内置的的,Pull解析器与SAX解析器类似,他提供了类似的事件,如开始元素和介绍元素的事件,使用parser.next()可以进入下一个元素并触发相应的事件,然后进行相应的处理,当元素开始解析时,调用perser.nextText()方法就可以获取到下一个Text类型元素的值. 2.pull特点 (1)简单的结构,一个接口,一个另外,一个工厂组成了Pull解析器 (2)简单易用,Pull解析器只有一个重要的方法next(),他被用来检索下一个事

  • Android中使用pull解析器操作xml文件的解决办法

    一.使用Pull解析器读取XML文件 除了可以使用SAX或DOM解析XML文件之外,大家也可以使用Android内置的Pull解析器解析XML文件. Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE.如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件.android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的. Pull解析器的运行方式与SAX 解析器相似.

  • Java语言中的自定义类加载器实例解析

    本文研究的主要是Java语言中的自定义类加载器实例解析的相关内容,具体如下. 自己写的类加载器 需要注意的是:如果想要对这个实例进行测试的话,首先需要在c盘建立一个c://myjava的目录.然后将相应的java文件放在这个目录中.并将产生的.clas文件放在c://myjava/com/lg.test目录下,否则是找不到的.这是要注意的.. class FileClassLoader : package com.lg.test; import java.io.ByteArrayOutputSt

  • Go语言JSON解析器gjson使用方法详解

    目录 gjson 安装 使用 gjson GJSON 是一个Go包,它提供了一种从json文档中获取值的快速简单的方法.它具有单行检索.点符号路径.迭代和解析 json 行等功能. 还可以查看SJSON以修改 json,以及JJ命令行工具. 本自述文件是如何使用 GJSON 的快速概述,有关更多信息,请查看GJSON 语法. github 的地址在这里. 安装 安装gjson,使用的是go传统的安装方法: go install github.com/tidwall/gjson@latest 在文

  • spring使用OXM进行对象XML映射解析

    1.认识XML解析技术 1.1.XML相关概念 (1)DTD:XML语法规则,是XML文件的验证机制,可以通过比较XML文档和DTD文件看文档是否符合规范,元素和标签是否使用正确. (2)XML是SOA的基础. 1.2.XML处理技术 (1)为了使用XML,我们需要通过XML处理器或XMLAPI来访问数据,目前JAXP提供了2种处理XML的方法:DOM和SAX. ①DOM:DOM通过编程方式对XML文档中数据及结构进行访问,基于XML文档在内存中的树状结构.其缺点是将整个XML文档装入内存需要很

  • Python实现XML文件解析的示例代码

    1. XML简介 XML(eXtensible Markup Language)指可扩展标记语言,被设计用来传输和存储数据,已经日趋成为当前许多新生技术的核心,在不同的领域都有着不同的应用.它是web发展到一定阶段的必然产物,既具有SGML的核心特征,又有着HTML的简单特性,还具有明确和结构良好等许多新的特性. test.XML文件 <?xml version="1.0" encoding="utf-8"?> <catalog> <m

随机推荐