xml文件读取
2015-07-13 21:01
337 查看
xml文件读取
利用库tinyxml
示例xml
long intobjectnum = 0;
int i;
float* regnum;
TiXmlDocument*Document = new TiXmlDocument();
Document-> LoadFile(xmlpath);//获取对应路径上的xml
if(Document==NULL)
{
AfxMessageBox("读取XML文件失败");
return FALSE;
}
TiXmlElement* nodeElement=Document->RootElement();//获取根节点
TiXmlElement* objectElement=nodeElement->FirstChildElement();//获取一级子节点
// objectElement指针为空则读到末尾了,获得object数量,
while(objectElement)
{
objectnum++;
objectElement= objectElement->NextSiblingElement();//获取同级别下一个节点
}
m_nRegionNum= objectnum;
reginfo = new REGIONINFO[m_nRegionNum];
regnum = new
float[m_nRegionNum];
//读取信息
objectElement=nodeElement->FirstChildElement();//获取子节点
objectnum =0;
while(objectElement)
{
TiXmlElement* RegionNoElement =objectElement->FirstChildElement();//获取RegionNo节点
reginfo[objectnum].RegionNo= atof(RegionNoElement->GetText());//转换格式
regnum[objectnum]= reginfo[objectnum].RegionNo;
TiXmlElement*PixelNumElement = RegionNoElement->NextSiblingElement(); reginfo[objectnum].PointCount =atoi(PixelNumElement->GetText());
TiXmlElement*BandSumElement = PixelNumElement->NextSiblingElement(); TiXmlElement* BandSum1Element = BandSumElement->FirstChildElement();
reginfo[objectnum].GraySum[0]= atof(BandSum1Element->GetText());
for(i=1; i<bandnum; i++)
{
BandSum1Element =BandSum1Element->NextSiblingElement();
reginfo[objectnum].GraySum[i] =atof(BandSum1Element->GetText());
if(i>=3)
break;
}
TiXmlElement*Band2SumElement = BandSumElement->NextSiblingElement();
TiXmlElement*Band2Sum1Element = Band2SumElement->FirstChildElement();
reginfo[objectnum].Gray2Sum[0]= atof(Band2Sum1Element->GetText());
for(i=1;i<bandnum; i++)
{
Band2Sum1Element =Band2Sum1Element->NextSiblingElement();
reginfo[objectnum].Gray2Sum[i] =atof(Band2Sum1Element->GetText());
if(i>=3)
break;
}
TiXmlElement*OutRectElement = Band2SumElement->NextSiblingElement();
TiXmlElement*LeftXElement = OutRectElement->FirstChildElement();
reginfo[objectnum].DirtyRect.Left= atoi(LeftXElement->GetText());
TiXmlElement*LeftYElement = LeftXElement->NextSiblingElement();
reginfo[objectnum].DirtyRect.Bottom= atoi(LeftYElement->GetText());
TiXmlElement*RightXElement = LeftYElement->NextSiblingElement();
reginfo[objectnum].DirtyRect.Right= atoi(RightXElement->GetText());
TiXmlElement* RightYElement = RightXElement->NextSiblingElement();
reginfo[objectnum].DirtyRect.Top= atoi(RightYElement->GetText());
objectnum++;
//读取下一个object
objectElement= objectElement->NextSiblingElement();
}
delete Document;//记得释放内存,这个指针占用大量内存
利用库tinyxml
示例xml
long intobjectnum = 0;
int i;
float* regnum;
TiXmlDocument*Document = new TiXmlDocument();
Document-> LoadFile(xmlpath);//获取对应路径上的xml
if(Document==NULL)
{
AfxMessageBox("读取XML文件失败");
return FALSE;
}
TiXmlElement* nodeElement=Document->RootElement();//获取根节点
TiXmlElement* objectElement=nodeElement->FirstChildElement();//获取一级子节点
// objectElement指针为空则读到末尾了,获得object数量,
while(objectElement)
{
objectnum++;
objectElement= objectElement->NextSiblingElement();//获取同级别下一个节点
}
m_nRegionNum= objectnum;
reginfo = new REGIONINFO[m_nRegionNum];
regnum = new
float[m_nRegionNum];
//读取信息
objectElement=nodeElement->FirstChildElement();//获取子节点
objectnum =0;
while(objectElement)
{
TiXmlElement* RegionNoElement =objectElement->FirstChildElement();//获取RegionNo节点
reginfo[objectnum].RegionNo= atof(RegionNoElement->GetText());//转换格式
regnum[objectnum]= reginfo[objectnum].RegionNo;
TiXmlElement*PixelNumElement = RegionNoElement->NextSiblingElement(); reginfo[objectnum].PointCount =atoi(PixelNumElement->GetText());
TiXmlElement*BandSumElement = PixelNumElement->NextSiblingElement(); TiXmlElement* BandSum1Element = BandSumElement->FirstChildElement();
reginfo[objectnum].GraySum[0]= atof(BandSum1Element->GetText());
for(i=1; i<bandnum; i++)
{
BandSum1Element =BandSum1Element->NextSiblingElement();
reginfo[objectnum].GraySum[i] =atof(BandSum1Element->GetText());
if(i>=3)
break;
}
TiXmlElement*Band2SumElement = BandSumElement->NextSiblingElement();
TiXmlElement*Band2Sum1Element = Band2SumElement->FirstChildElement();
reginfo[objectnum].Gray2Sum[0]= atof(Band2Sum1Element->GetText());
for(i=1;i<bandnum; i++)
{
Band2Sum1Element =Band2Sum1Element->NextSiblingElement();
reginfo[objectnum].Gray2Sum[i] =atof(Band2Sum1Element->GetText());
if(i>=3)
break;
}
TiXmlElement*OutRectElement = Band2SumElement->NextSiblingElement();
TiXmlElement*LeftXElement = OutRectElement->FirstChildElement();
reginfo[objectnum].DirtyRect.Left= atoi(LeftXElement->GetText());
TiXmlElement*LeftYElement = LeftXElement->NextSiblingElement();
reginfo[objectnum].DirtyRect.Bottom= atoi(LeftYElement->GetText());
TiXmlElement*RightXElement = LeftYElement->NextSiblingElement();
reginfo[objectnum].DirtyRect.Right= atoi(RightXElement->GetText());
TiXmlElement* RightYElement = RightXElement->NextSiblingElement();
reginfo[objectnum].DirtyRect.Top= atoi(RightYElement->GetText());
objectnum++;
//读取下一个object
objectElement= objectElement->NextSiblingElement();
}
delete Document;//记得释放内存,这个指针占用大量内存
相关文章推荐
- sqlconnection连接方法
- java实现双向循环链表
- Android中目的地Intent的使用
- 选择文件夹,路径选择
- MySQL时区修改
- c/c++ # 与 ##
- HDU (1175)连连看
- currentStyle和getComputedStyle的兼容写法
- ZedBoard minicom无法通信问题
- 时间序列分析步骤及sas代码
- jQuery学习笔记(一)——基础选择器、过滤选择器、表单选择器
- Android 运行程序报错:Unable to execute dex: Multiple dex files define Lcom/baidu/android/pushservice/Push
- UVALive - 3363 String Compression 区间DP
- C语言入门学习总结(一)
- leetcode-Remove Duplicates from Sorted Array II
- 前端开发值得推荐的各种资源
- C语言时间处理
- 导航控制器(NavigationController)中设置标题的常用方法
- C语言中函数的妙用
- yii2简述一对一数据表关联