MangeXml.cpp
资源名称:Client.rar [点击查看]
上传用户:szjkjd
上传日期:2022-06-27
资源大小:8968k
文件大小:10k
源码类别:
浏览器
开发平台:
Visual C++
- /*! @mangexml.cpp
- *******************************************************************************
- <PRE>
- 模块名 : 对XM文件的操作
- 文件名 : mangexml.cpp
- 相关文件 : mangexml.hxml.c,iconv.dll,libxml2.dll,zlib1.dll,iconv.lib,libxml2.lib,
- : odbc32.lib,odbccp32.lib,iconv.h,以及iconv-1.9.2.win32、libxml2-2.7.6.win32库
- 文件实现功能 : 对XM文件的操作,包括文件的创建、增加、删除、修改、查询。
- 作者 : 王小静
- 版本 : 1.0
- --------------------------------------------------------------------------------
- 备注 : -
- --------------------------------------------------------------------------------
- 修改记录 :
- 日 期 版本 修改人 修改内容
- 2010/02/08 1.0 王小静 创建
- 2010/03/01 1.1 王小静 修改ChangwXml函数,实现修改
- </PRE>
- ********************************************************************************
- * 版权所有(c) 2010, 17jago, 保留所有权利
- *******************************************************************************/
- #include "stdafx.h"
- #include ".mangexml.h"
- #include "xml.h"
- #include "stdio.h"
- #include "stdlib.h"
- #include "string.h"
- //构造函数
- CMangeXml::CMangeXml(void)
- {
- }
- //析构函数
- CMangeXml::~CMangeXml(void)
- {
- }
- /*! @CreateXml
- ************************************************************************************** <PRE> 函数名 : CreateXml 功能 : 创建一个xml文件 参数 : [IN] filename : 创建文件的名字,包括文件的所在路径 : [IN] encoding : 文件的编码格式 : [IN] root : xml文件的根目录 返回值 : 成功返回创建的true, 失败返回false -------------------------------------------------------------------------------- 备注 : -
- 典型用法 : -
- --------------------------------------------------------------------------------
- 作者 : 王小静
- </PRE> *************************************************************************************/
- bool CMangeXml::CreateXml(const char* filename, const char* encoding, const char* root)
- {
- //定义结构体变量
- TXML *p_xml;
- //创建文件
- p_xml = xml_create(filename,encoding,root);
- //判断是否创建成功,为NULL失败
- if(p_xml == NULL)
- {
- return false;
- }
- //判断是否保存成功
- int i_save = 0;
- if((i_save = xml_save_close(p_xml)) != 0)
- {
- return false;
- }
- //创建文件的返回值
- return true;
- }
- /*! @AddXml
- ************************************************************************************* <PRE> 函数名 : AddXml 功能 : 在已经存在xml文件中添加数据 参数 : [IN] filename : 文件的名字,包括文件的所在路径 : [IN] XPath : 添加xml文件的路径, : [IN] index : 添加数据数据节点序号,节点起始位置是1 : [IN] name : xml中添加名称 : [IN] value : xml的内容 返回值 : 成功返回0, 失败返回-1 -------------------------------------------------------------------------------- 备注 : -
- 典型用法 : -
- --------------------------------------------------------------------------------
- 作者 : 王小静
- </PRE> *************************************************************************************/
- int CMangeXml::AddXml(const char * filename, const char * xpath, const int index , const char* name, const char* value)
- {
- TXML *p_myxml;
- //保存xpath和index的拼接结果
- char p_temp[1024] = {0};
- //打开已经存在的xml文件
- p_myxml =xml_create_file(filename);
- //是否打开成功判断
- if(p_myxml == NULL)
- {
- return -1;
- }
- //将index与xpath相结合,保证最后匹配的字段只有一个。
- //节点位置判断
- if(index <= 0)
- {
- //index无效,直接赋值给p_temp
- sprintf(p_temp,"%s",xpath);
- }
- else
- {
- //拼接xpath和index
- sprintf(p_temp,"%s[%d]",xpath,index);
- }
- //添加数据是否成功判断
- if((xml_add_child(p_myxml,p_temp,name,value,NULL)) != 0 )
- {
- //关闭已经打开的xml文件
- xml_save_close(p_myxml);
- return -1;
- }
- //关闭已经打开的xml文件
- xml_save_close(p_myxml);
- return 0;
- }
- /*! @DeleteXml
- ************************************************************************************* <PRE> 函数名 : DeleteXml 功能 : 在已经存在xml文件删除满足条件的数据 参数 : [IN] filename : 文件的名字,包括文件的所在路径 : [IN] XPath : 删除xml文件的路径 : [IN] index : 删除数据节点序号,节点起始位置是1 返回值 : 成功返回true, 失败返回false ------------------------------------------------------------------------------------- 备注 : -
- 典型用法 : -
- -------------------------------------------------------------------------------------
- 作者 : 王小静
- </PRE> *************************************************************************************/
- bool CMangeXml::DeleteXml(const char * filename, const char * xpath,const int index)
- {
- TXML * m_dxml;
- //打开已经存在xml文件
- m_dxml = xml_create_file(filename);
- //判断是否打开成功
- if(m_dxml == NULL)
- {
- return false;
- }
- //将index与xpath结合,保证匹配唯一
- char xpath_tmp[1024] = {0};
- if(index <= 0)
- {
- sprintf(xpath_tmp,"%s",xpath);
- }
- sprintf(xpath_tmp,"%s[%d]",xpath,index);
- //删除xml文件中满足条件的数据
- if((xml_remove(m_dxml,xpath_tmp)) != 0)
- {
- //失败则关闭文件
- xml_close(m_dxml);
- return false;
- }
- //成功则保存并关闭文件
- xml_save_close(m_dxml);
- return true;
- }
- /*! @ReadXml
- ************************************************************************************* 函数名 : ReadXml 功能 : 在已经存在xml文件中读取满足条件的数据 参数 : [IN] filename : 文件的名字,包括文件的所在路径 : [IN] XPath : 查询xml文件的路径 : [IN] index : 查询数据节点序号,节点起始位置是0 返回值 : 成功返回字符串获得的字符串, 失败返回NULL ------------------------------------------------------------------------------------- 备注 : 始终处于打开状态,最后应用CloseXml关闭保存文件
- 典型用法 : -
- -------------------------------------------------------------------------------------
- 作者 : 王小静
- </PRE> *************************************************************************************/
- TXML * CMangeXml::ReadXml(const char * filename, const char * xpath, const int index)
- {
- TXML * p_readXml;
- //查询得到的内容
- char *str;
- //打开xml文件
- if((p_readXml = xml_create_file(filename)) == NULL)
- {
- return NULL;
- }
- int count;
- //获得满足xpath的节点数目
- if((count = xml_select_nodes(p_readXml,xpath)) == -1)
- {
- //失败的关闭文件
- xml_close(p_readXml);
- return NULL;
- }
- //获得由xpath和index确定的节点的内容
- if((str = xml_read_set_content(p_readXml,index)) == NULL)
- {
- xml_close(p_readXml);
- return NULL;
- }
- //指针初始化
- p_con = (char *)malloc(sizeof(char) * 1024);
- //赋值给全局变量,做参数返回
- sprintf(p_con,"%s",str);
- //返回打开的xml
- return p_readXml;
- }
- /*! @Changexml
- ************************************************************************************* * 函数名 : Changexml * 功能 : 在已经存在xml文件修改满足条件的数据 * 参数 : [IN] filename : 文件的名字,包括文件的所在路径 * : [IN] XPath : xml文件的路径 * : [IN] index : 读数据节点序号,节点起始位置是0 * : [IN] name : 修要修改的属性名 * : [IN] value : 需要修改的xml内容 * 返回值 : 成功返回true, 失败返回false ------------------------------------------------------------------------------------- 备注 : -
- 典型用法 : -
- -------------------------------------------------------------------------------------
- 作者 : 王小静
- </PRE> *************************************************************************************/
- bool CMangeXml::Changexml(const char * filename, const char * xpath, const int index, const char * name, const char * value)
- {
- TXML * Changexml;
- //打开xml文件
- if((Changexml = xml_create_file(filename)) == NULL)
- {
- return NULL;
- }
- //获取个数
- int index_tmp = index_tmp = xml_select_nodes(Changexml,xpath);
- //判断失败,关闭保存返回
- if(-1 == index_tmp)
- {
- xml_save_close(Changexml);
- return false ;
- }
- //修改xml文件
- if(0 != (xml_write_set_content(Changexml,index,value)))
- {
- xml_save_close(Changexml);
- return false ;
- }
- //保存并关闭文件
- xml_save_close(Changexml);
- return true;
- }
- /*! @CloseXml
- ************************************************************************************* 函数名 : CloseXml 功能 : 关闭已经打开的xml文件 参数 : [IN] xml : 打开的xml文件 返回值 : - ------------------------------------------------------------------------------------- 备注 : -
- 典型用法 : -
- -------------------------------------------------------------------------------------
- 作者 : 王小静
- </PRE> *************************************************************************************/
- void CMangeXml::CloseXml(TXML * xml)
- {
- //关闭xml
- xml_close(xml);
- }
- /*! @SumXmlNodes
- ************************************************************************************* 函数名 : SumXmlNodes 功能 : 获得符合xpath的节点个数 参数 : [IN] filename : 文件的名字,包括文件的所在路径 ; [IN] XPath : xml文件的路径 返回值 : 成功返回获得结点个数, 失败返回-1 ------------------------------------------------------------------------------------- 备注 : -
- 典型用法 : -
- -------------------------------------------------------------------------------------
- 作者 : 王小静
- </PRE> *************************************************************************************/
- int CMangeXml::SumXmlNodes(const char * filename, const char * xpath)
- {
- //xml变量
- TXML *pSumxml;
- //打开 xml
- pSumxml = xml_create_file(filename);
- if( pSumxml == NULL)
- {
- return -1;
- }
- //xpath的个数
- int iSumNode = xml_select_nodes(pSumxml,xpath);
- //失败为-1
- if(iSumNode == -1 )
- {
- xml_close(pSumxml);
- return -1;
- }
- xml_close(pSumxml);
- return iSumNode;
- }