Mini-XML学习

Mini-XML

 

规模比libxml2小,只需要ANSI C编译器(GCC可用),支持读写UTF-8编码的XML文件和字符串,数据保存在一个链表树结构下。支持创建和解析XML文档

这里面有miniXML的函数列表 ,大部分是DOM的方法(很多是针对节点的操作,应该需要事先生成节点树之类的吧),但也有SAX的方法,所以应该也支持SAX模型。

 

源码

 

 

编译

 

  • 进入源码目录,运行configure进行配置,可以选配目标地址

 

./configure --prefix=/home/Program

 

  • 然后运行make,make文件将默认按GCC编译所有源码,并编译测试程序testmxml.c,生成.o及可执行文件。也可以在make文件中把“CC”改为arm-linux-gcc,但是编译一半会有错误。
  • 也可以运行make install,它将把Mini-XML安装到系统库中,在安装目录下生成lib/libmxml.a,并添加目录。在链接生成可执行程序时,添加 -lmxml 选项即可。

 

MakeFile精简

 

精简原来的makeFile,config.h里面根据configure的执行结果定义了几个本机是否包含的特征,比如是否支持线程,long long类型之类的,这个文件需要保留,目前我全部设为不含这些特性。 删除来mxmldoc,install,uninstall等,保留来libmxml.a的生成和testmxml测试程序的生成,可以更改testmxml.c里的代码,并直接用make来生成可执行程序进行测试。

 

使用

 

  • 需要引用头文件mxml.h
  • XML节点被定义为mxml_node_t结构体,节点类型分为element,integer,opaque,real和text五种。
  • 新的节点可以通过调用mxmlNewElement(),mxmlNewInteger(),mxmlNewOpaque(),mxmlNewReal(),和mxmlNewText()来创建不同类型的节点

 

SAX

 

  • Mini-XML实现了XML简单API(SAX),允许用户用节点流来加载并处理XML文档,不仅允许处理任意大小的XML文档,同时也可以把部分的文档保留在内存中。
  • 使用mxmlSAXLoadFd,mxmlSAXLoadFile和mxmlSAXLoadString来载入XML文档,每个方法使用一个回调函数来处理解析到的每个节点。
  • 回调函数接受这个节点,一个事件和一个用户数据指针:

 

void sax_cb(mxml_node_t *node, 
mxml_sax_event evnet,
void *data)
{}

 

  • 以下为事件列表:
    • MXML_SAX_CDATA - CDATA was just read
    • MXML_SAX_COMMENT - A comment was just read
    • MXML_SAX_DATA - Data (custom, integer, opaque, real, or text) was just read
    • MXML_SAX_DIRECTIVE - A processing directive was just read
    • MXML_SAX_ELEMENT_CLOSE - A close element was just read ( </element>)

    • MXML_SAX_ELEMENT_OPEN - An open element was just read ( <element>)

  • 当 处理完一个结束标记后,内存中的这个标记将被删除。所有内存中的节点在处理完后,都会被删除。SAX回调函数可以使用mxmlRetain方法来保留内存 中的节点,以便后面的程序使用。(如果采用SAX读XML,就需要在回调函数中保存数据到某个结构体之类的东西里)例子如:

 

void sax_cb(mxml_node_t *node, 
mxml_sax_event_t event,
void *data)
{
if (event != MXML_SAX_ELEMENT_CLOSE)
mxmlRetain(node);
}

 

  • 可以采用CALLBACK函数来出来读出来的数据,不需要保存数据到内存中,SAX的处理流程就是从头到尾地读取每一个节点(开始节点,节点内容,结束节点)。
  • 最后当你完成XML数据处理后,需要调用mxmlDelete()函数来释放内存中的部分或所有节点。mxmlDelete(tree)。

你可能感兴趣的:(xml,Integer,文档,processing,callback,makefile)