资源简介
c++读取XML配置文件C++中并没有操作XML文件的标准库,因此大家需要使用各自熟悉的XML库来解决XML文件的读取与写入。XML的一个重要用途是作为程序的配置文件,存储程序运行相关的各种数据。本文总结了使用libxml2库来对XML配置文件进行编程的一些经验。最后提供了一个封装好的类CXMLConfig,并详细说明了该类的功能、使用方法和注意事项。
代码片段和文件信息
#include “stdafx.h“
#include
#include l/parser.h>
#include l/xpath.h>
#include
#include “Code_Conv.h“
//代码转换:从一种编码转为另一种编码
int code_convert(char* from_charset char* to_charset char* inbuf
int inlen char* outbuf int outlen)
{
iconv_t cd;
char** pin = &inbuf;
char** pout = &outbuf;
cd = iconv_open(to_charsetfrom_charset);
if(cd == 0)
return -1;
memset(outbuf0outlen);
if(iconv(cd(const char**)pin(unsigned int *)&inlenpout(unsigned int*)&outlen)
== -1)
return -1;
iconv_close(cd);
return 0;
}
//UNICODE码转为GB2312码
//成功则返回一个动态分配的char*变量,需要在使用完毕后手动free,失败返回NULL
char* u2g(char *inbuf)
{
int nOutLen = 2 * strlen(inbuf) + 1;
char* szOut = (char*)malloc(nOutLen);
if (-1 == code_convert(“utf-8““gb2312“inbufstrlen(inbuf)szOutnOutLen))
{
free(szOut);
szOut = NULL;
}
return szOut;
}
//GB2312码转为UNICODE码
//成功则返回一个动态分配的char*变量,需要在使用完毕后手动free,失败返回NULL
char* g2u(char *inbuf)
{
int nOutLen = 2 * strlen(inbuf) + 1;
char* szOut = (char*)malloc(nOutLen);
if (-1 == code_convert(“gb2312““utf-8“inbufstrlen(inbuf)szOutnOutLen))
{
free(szOut);
szOut = NULL;
}
return szOut;
}
xmlXPathobjectPtr get_nodeset(xmlDocPtr doc const xmlChar *xpath)
{
xmlXPathContextPtr context;
xmlXPathobjectPtr result;
context = xmlXPathNewContext(doc);
if (context == NULL)
{
printf(“context is NULL\n“);
return NULL;
}
result = xmlXPathEvalexpression(xpath context);
xmlXPathFreeContext(context);
if (result == NULL)
{
printf(“xmlXPathEvalexpression return NULL\n“);
return NULL;
}
if (xmlXPathNodeSetIsEmpty(result->nodesetval))
{
xmlXPathFreeobject(result);
printf(“nodeset is empty\n“);
return NULL;
}
return result;
}
string getxmlString(xmlDocPtr doc const char *szXpath)
{
xmlXPathobjectPtr result;
string strRel;
result = get_nodeset(docBAD_CAST szXpath);
if (result == NULL)
{
printf(“xmlXPathEvalexpression return NULL\n“);
return NULL;
}
xmlNodeSetPtr nodeSetPtr = result->nodesetval;
//查出符合xpath的节点集合
if (xmlXPathNodeSetIsEmpty(nodeSetPtr))
{
xmlXPathFreeobject(result);
printf(“nodeset is empty\n“);
return NULL;
}
//查出节点集合中唯一节点的内容值
xmlNodePtr nodePtr = nodeSetPtr->nodeTab[0];
strRel = (const char*)xmlNodeGetContent(nodePtr);
return strRel;
}
int getxmlInt(xmlDocPtr doc const char* szXpath)
{
xmlXPathobjectPtr result;
int iRel;
result = get_nodeset(docBAD_CAST szXpath);
if (result == NULL)
{
printf(“xmlXPathEvalexpression return NULL\n“);
return NULL;
}
xmlNodeSetPtr nodeSetPtr = result->nodesetval;
//查出符合xpath的节点集合
if (xmlXPathNodeSetIsEmpty(nodeSetPtr))
{
xmlXPathFreeobject(result);
printf(“nodeset is empty\n“);
return NULL;
}
xmlNodePtr nodePtr = nodeSetPtr->nodeTab[0];
iRel = atoi((const cha
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4056 2008-05-27 09:44 xm
文件 930 2008-05-27 09:44 xm
文件 62 2008-05-26 14:59 xm
文件 888832 2006-05-03 21:57 xm
文件 967168 2007-08-27 20:11 xm
文件 162 2008-05-27 15:03 xm
文件 162 2008-05-27 15:03 xm
文件 55808 2007-07-02 17:06 xm
文件 14149 2008-05-27 16:20 xm
文件 214152 2008-05-26 15:48 xm
文件 508928 2008-05-27 16:20 xm
文件 2508 2008-05-26 15:48 xm
文件 66560 2008-05-27 16:20 xm
文件 110592 2008-05-27 16:20 xm
文件 1146 2008-05-27 15:32 xm
文件 4639 2008-05-26 15:50 xm
文件 1379 2008-05-27 16:20 xm
文件 1220 2008-05-26 15:48 xm
文件 295 2008-05-26 15:48 xm
文件 769 2008-05-26 15:48 xm
文件 2508 2008-05-27 10:42 xm
文件 44244 2008-05-27 14:30 xm
文件 214152 2008-05-27 10:42 xm
文件 582656 2008-05-27 14:31 xm
文件 123904 2008-05-27 14:31 xm
文件 176128 2008-05-27 14:31 xm
文件 67456 2008-05-27 14:31 xm
文件 1220 2008-05-27 10:37 xm
文件 295 2008-05-27 10:37 xm
文件 769 2008-05-27 10:37 xm
............此处省略33个文件信息
相关资源
-
用c++实现的简单xm
l解析 -
c++实现解析xm
l -
msxm
l的使用 vc6 -
最简单的c++ xm
l类,跨平台使用 -
C++xm
l高级编程指南扫描版 -
c++ xm
l处理 domsax -
可以快速批量生成HTML/xm
l/WORD文档 - 自己写的MFC串口调试软件
-
c++实现的简单xm
l解析器 -
C语言编写的xm
l库源文件(支持xm< -
xm
l解析 CMarkup类 c++ - matlab2016b配置VS2017编译器mexopts补丁文
-
MFC、DOM实现的xm
l文件解析、修改和 -
VC 读写xm
l文件运用 -
纯C语言解析xm
l字符串 - 北邮计算机院数据结构课程大作业:
-
xm
l文件解析C语言 -
c语言解析xm
l格式代码。 - Cmarkup类....
-
纯C语言解析xm
l字符串含 -
c++ xm
lRPC -
xm
l解析网络位置 -
银行储蓄系统生成xm
l文件 -
C++解析xm
l源码/socket通讯案例
评论
共有 条评论