您的位置:首页 > 编程语言 > C语言/C++

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

2010-01-26 14:37 459 查看
/*
* 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: