XML 解析c++源码(头文件)

来源:互联网 发布:java 字符串搜索 编辑:程序博客网 时间:2024/06/05 05:37

/*
 * XMLTool.h 配置文件解析动态库头文件
 *  主要输出函数接口分别实现对配置文件的读取和写入,针对结果集的复制清空,和两个字符串处理函数
 *  读取配置文件接口 :int ReadXMLFile(XML_Node_Vector *XmlNodeVector, string filepath);
 *  写入配置文件接口 :int WriteXMLFile(XML_Node_Vector *XmlNodeVector, string filepath,bool is_addend = true);
 *  复制结构集接口  :bool VecDataCopy(XML_Node_Vector *XmlNodeVectorDest,const XML_Node_Vector *XmlNodeVectorSource);
 *  清空结构集接口      :bool VecDataClean(XML_Node_Vector *XmlNodeVector);
 *  字符串安全拷贝接口 :bool strncpy_ex(char *pStrDest,const char *pStrSource,int nDestSize);
 *  字符串安全处理接口  :bool printf_ex(char* szBuf,int nDestSize,char *szFormat, ...);
 *
 * 配置文件信息结构大概如下 注意 <> 符号包括其中的字符串仅为现在说名信息
 *
 * |[1234<节点头数据>]<节点头>
 * |abc<节点前信息体数据>=123<节点后信息体数据>
 * |123<节点前信息体数据>=890<节点后信息体数据>
 * | 
 * 注意:
 *  0.所有有效行数据必须顶格书写否者将不会读取该行数据,将作为无效数据处理 (所有无效数据将不予读取
 *   0.1:不顶格书写
 *   0.2:顶格第一个字符为 # 或 $
 *   0.3:顶格第一个字符为 =
 *  1.节点前信息体数据在读取数据的时候自动舍去空格,而节点后信息体数据不做处理,将原样读取
 *  2. # 和 $ 符号为注解符 遇到他们开始的行将不读取他们的数据 或者在不顶行书写
 *  3.具体数据结构请对照定义
 *
 * createtime:2010-1-26
 * edittime:2010-1-27
 * creator:seky.gu
 * editor;seky.gu
 * mingyao.gu@hp.com
 */

 


#ifndef _XML_TOOL_H_
#define _XML_TOOL_H_


#include <vector>
#include <map>
#include <string>
using namespace std;


#if defined DLL_EXPORT
#define DECLDIR __declspec(dllimport)
#else
#define DECLDIR __declspec(dllexport)
#endif

//信息体定义
typedef pair<string,string> multimap_item;

//节点定义
struct XML_Node
{
 string node_title;
 multimap<string,string> xml_body;
 multimap<string,string>::iterator boby_item;
 //数据体数据条数
 int GetItemCount()
 {return xml_body.size();}
 //向节点插入节点信息体 abc=123
 bool InsertItem(string xml_key,string xml_info)
 {xml_body.insert(multimap_item(xml_key,xml_info));return true;}
 //初始化节点
 XML_Node()
 {node_title="";boby_item = xml_body.begin();}
}*_XML_Node;

//数据节点集定义
struct XML_Node_Vector
{
 int node_type; 
 vector<XML_Node> xml_node_vector;
 vector<XML_Node>::iterator node_item;
 //节点个数
 int GetItemCount()
 {return xml_node_vector.size();}
 //向节点集插入节点
 bool InsertItem(XML_Node xmlnode)
 {xml_node_vector.push_back(xmlnode);return true;}
 //初始化节点集
 XML_Node_Vector()
 {node_type=0;node_item = xml_node_vector.begin();}
 ~XML_Node_Vector()
 {}
}*_XML_Node_Vector;

//函数定义
extern "C"
{
 /*  读取配置文件
  * int ReadXMLFile(XML_Node_Vector *XmlNodeVector, string filepath)
  *
  * XmlNodeVector 节点集结构体<具体见定义>
  * filepath 文件路径<绝对路径 包含文件名>
  *
  * return 返回处理结果<详见定义>
  */
 DECLDIR int ReadXMLFile(XML_Node_Vector *XmlNodeVector, string filepath);

 /*  将节点集数据写入配置文件
  * int WriteXMLFile(XML_Node_Vector *XmlNodeVector, string filepath,bool is_addend)
  *
  * XmlNodeVector 节点集结构体<具体见定义>
  * filepath 文件路径<绝对路径 包含文件名>
  * is_addend 写入类型<true 在文件末尾继续添加 false 将源文件内容更新为当前数据>
  *
  * return 返回处理结果<详见定义>
  */
 DECLDIR int WriteXMLFile(XML_Node_Vector *XmlNodeVector, string filepath,bool is_addend = true);

 /*  复制节点集信息
  * int DataCopy(XML_Node_Vector *XmlNodeVectorAim,const XML_Node_Vector *XmlNodeVectorSource);
  *
  * XmlNodeVectorAim 目标节点集结构体<具体见定义>
  * XmlNodeVectorSource 源节点集结构体<具体见定义>  
  *
  * return 返回处理结果<详见定义>
  */
 DECLDIR bool VecDataCopy(XML_Node_Vector *XmlNodeVectorDest,const XML_Node_Vector *XmlNodeVectorSource);

 /*  清空节点集信息
  * bool VecDataClean(XML_Node_Vector *XmlNodeVector);
  *
  * XmlNodeVector 待清空的目标节点集结构体<具体见定义>  
  *
  * return 返回处理结果<详见定义>
  */
 DECLDIR bool VecDataClean(XML_Node_Vector *XmlNodeVector);

 /*  字符串安全拷贝函数(该函数检查了目标和源字符串的空间溢出问题,对于源字串长度不够填充目标字串采用0补位)
  * bool strncpy_ex(char *pD,const char *pS,int nDestSize);
  *
  * pStrDest 目标字串<char*>
  * pStrSource 源字串<char*>
  * nDestSize 从源字符串拷贝到目标字符串的字符串大小<建议传递sizeof(pStrDest)>
  *
  * return 返回处理结果<详见定义>
  */
 DECLDIR bool strncpy_ex(char *pStrDest,const char *pStrSource,int nDestSize);

 /*  字符串安全处理函数(该函数检查了目标和源字符串的空间溢出问题,对于源字串长度不够填充目标字串采用0补位)
  * bool printf_ex(char* szBuf,int nDestSize,char *szFormat, ...);
  *
  * szBuf, nDestSize,szFormat,... .. .待处理的参数列表<具体参见 c++ nsprintf(... .. .)函数>  
  *
  * return 返回处理结果<详见定义>
  */
 DECLDIR bool printf_ex(char* szBuf,int nDestSize,char *szFormat, ...);

}

#endif

原创粉丝点击