VS Studio 下利用minixml 解析包含多个相同element的xml格式的参数文件

VS Studio 下利用minixml 解析包含多个相同element的xml格式的参数文件

Mini-XML 下载与编译

Mini-XML 是一个小型XML解析库,可从

https://github.com/michaelrsweet/mxml/archive/v3.2.zip

下载minixml ,最新版本是3.2版

解压到硬盘下,如下图所示

找到vcnet目录,如下图所示

用VS studio 打开mxml.sln工程,可以自行将源码编译为VS studio 开发需要的dll与lib,注意Debug与Release区别,以及Win32与X64的不同,并调整进行编译的VS版本,以免提示编译器找不到。

Mini-XML 加入自己的工程

  1. 将mxml.h放到\include目录下
  2. 将Debug、Release版mxml1.lib放到对应的库文件目录下,将mxml1.dll分别放入Debug、Release的执行路径下
  3. 在自己的工程的stdafx.h 文件中引入头文件mxml.h

       #include "include/mxml.h" //xml解析

    4. 在自己的工程中,打开工程属性,添加库文件mxml1.lib,以免编译时候找不到库文件

XML 解析

 

test.xml参数文件示例,假设该文件在D盘根路径下

<?xml version="1.0"?>

<params>

  <id>1</id>

  <num>8</num>

  <data>

       <childid>7</childid>

       <value1>-9.2</value1>

       <value2>0.3</value2>

  </data>

  <data>

      <childid>8</childid>

       <value1>3.2</value1>

       <value2>5.3</value2>

  </data>

</params>

 

 

解析代码如下

CString XMLFileInfo=”D:\\test.xml”;

FILE * Filefp;

mxml_node_t *Tree = NULL;

mxml_node_t *pParams = NULL;

mxml_node_t *pID = NULL;

mxml_node_t *pNum = NULL;

Filefp = fopen(XMLFileInfo, "r");

if (Filefp == NULL) return;

Tree = mxmlLoadFile(NULL, Filefp, MXML_TEXT_CALLBACK); //文件按文本格式读入

pParams = mxmlFindElement(Tree,Tree, "params", NULL, NULL, MXML_DESCEND);

pID = mxmlFindElement(pParams, Tree, "id", NULL, NULL, MXML_DESCEND);

pNum = mxmlFindElement(pParams,Tree, "num", NULL, NULL, MXML_DESCEND);

string tempID = mxmlGetText(pID,0);

string tempNums = mxmlGetText(pNum,0);

vector<Params>  obtainedParams; //创建结构体保存读入的参数

int iID = atoi(tempID.c_str()); //字符串转整数

int inums = atoi(tempNums.c_str());//字符串转整数

mxml_node_t  *DataNode;

DataNode = mxmlFindElement(pParams, Tree, "data", NULL, NULL, MXML_DESCEND);

while (1)  //循环读入相同elements

{

if (!DataNode) break;

mxml_node_t *pchildid, *pvalue1,*pvalue2;

pchildid = mxmlFindElement(DataNode, pParams, "childid", NULL, NULL, MXML_DESCEND);

Pvalue1 = mxmlFindElement(DataNode, pParams, "value1", NULL, NULL, MXML_DESCEND);

pvalue2 = mxmlFindElement(DataNode, pParams, "value2", NULL, NULL, MXML_DESCEND);

string tempchildid = mxmlGetText(pchildid, 0);

string tempvalue1 = mxmlGetText(pvalue1, 0);

string tempvalue2 = mxmlGetText(pvalue2, 0);

Params tempParams;

tempParams.childid = atoi(tempchildid.c_str());//类别标签

 

tempParams.value2 = atof(tempvalue1.c_str());//字符串转实数

tempParams.value3 = atof(tempvalue2.c_str());//字符串转实数

obtainedParams.push_back(Params); //参数保存备用

DataNode = mxmlGetNextSibling(DataNode);

DataNode = mxmlGetNextSibling(DataNode);

}

mxmlDelete(Tree);

fclose(Filefp); //参数读入结束

注意:XML文件中的字符区分大小写

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值