xml文件读取
利用库tinyxml
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;//记得释放内存,这个指针占用大量内存