C++读取XML

来源:互联网 发布:潮男装品牌淘宝 编辑:程序博客网 时间:2024/06/01 22:27

本文主要介绍:C++利用库函数TinyXml,读取XML文件。

一、下载TinyXml库文件

TinyXml库文件比较简单,包含一个tinyxml.lib和两个tinyxml.h、tinystr.h文件,库文件下载地址:
http://download.csdn.net/detail/hong__fang/8411043

二、配置VS
<1>在工程目录下创建include文件夹,把两个.h文件放入include文件夹;
<2>在工程目录下创建lib文件夹,把lib文件放入lib文件夹;
<3>在属性页 配置属性->VC++目录->包含目录 中添加include路径;
<4>在属性页 配置属性->VC++目录->库目录 中添加lib路径;
<5>在属性页  链接器->输入->附加依赖项 中输入tinyxml.lib;

三、读取程序
假定要读取的XML如下:

<?xml version="1.0" encoding="gb2312"?>  <Node>    <Alg>      <CName>监督分类参数</CName>      <EngName>ImageProcessingParameters</EngName>    </Alg>    <Parameters>      <InImg1 type="string" describe="待分类tif文件路径1">E:\GF1_WFV1_20140104_L1A0000145339_8_480_1131-1.tif</InImg1>      <InImg2 type="string" describe="待分类tif文件路径2">E:\GF1_WFV1_20140104_L1A0000145339_8_480_1131-2.tif</InImg2>      <InImg3 type="string" describe="待分类tif文件路径3">E:\GF1_WFV1_20140104_L1A0000145339_8_480_1131-3.tif</InImg3>      <InImg4 type="string" describe="待分类tif文件路径4">E:\GF1_WFV1_20140104_L1A0000145339_8_480_1131-4.tif</InImg4>      <AOItxtPath type="string" describe="txt样本路径">E:\1966427930086c.shp</AOItxtPath>      <ShapePath type="string" describe="裁剪矢量路径">E:\\1966427930086c.shp</ShapePath>      <ClassifyZero type="int" describe="是否忽略0值分类">0</ClassifyZero>      <IpBand type="int[]" describe="参加运算的波段的状态">1111</IpBand>      <OutImg type="string" describe="分类后输出图像的路径">E:\temp.tif</OutImg>      <StatisticFile type="string" describe="分类统计结果文件">E:\temp.txt</StatisticFile>    </Parameters>  </Node>  

先在cpp文件中,添加头文件 #include <tinyxml.h>  ,读取程序如下:

ReadXML(CString XMLPath)  {      //char path[50];     // strcpy_s(path,XMLPath.c_str());       TiXmlDocument* Document = new TiXmlDocument();      Document->LoadFile(XMLPath);//加载JDclassify.xml        if(Document==NULL)      {          AfxMessageBox("读取XML文件失败!");          return FALSE;      }      TiXmlElement* nodeElement=Document->RootElement();//获取根节点Node      TiXmlElement* AlgElement=nodeElement->FirstChildElement();//获取Alg节点      TiXmlElement* ParElement=AlgElement->NextSiblingElement();//获取Parameters节点      TiXmlElement* FirstElement=ParElement->FirstChildElement();//获取Parameters节点的第一个孩子节点        int Flag,m_classifyzero;      CString InimgBand1,InimgBand2,InimgBand3,InimgBand4,charfile,CutVectorPath,Outimgstatisticfile;            while(FirstElement)      {          //cout<<FirstElement->Value()<<" : "<<FirstElement->GetText()<<endl;          InimgBand1.Format("%s",FirstElement->GetText()); //波段1路径            FirstElement=FirstElement->NextSiblingElement(); //波段2路径          InimgBand2.Format("%s",FirstElement->GetText());            FirstElement=FirstElement->NextSiblingElement(); //波段3路径          InimgBand3.Format("%s",FirstElement->GetText());            FirstElement=FirstElement->NextSiblingElement(); //波段4路径          InimgBand4.Format("%s",FirstElement->GetText());            FirstElement=FirstElement->NextSiblingElement(); //样本文件路径          charfile.Format("%s",FirstElement->GetText());            FirstElement=FirstElement->NextSiblingElement();  //裁剪矢量路径          CutVectorPath.Format("%s",FirstElement->GetText());            FirstElement=FirstElement->NextSiblingElement();          m_classifyzero = atoi(FirstElement->GetText()); //是否忽略0值分类            FirstElement=FirstElement->NextSiblingElement();          Flag = atoi(FirstElement->GetText());    //选择参与运算波段              FirstElement=FirstElement->NextSiblingElement();          Outimg.Format("%s",FirstElement->GetText()); //输出图像路径            FirstElement=FirstElement->NextSiblingElement();          statisticfile.Format("%s",FirstElement->GetText()); //统计分类结果路径          break;      }        return TRUE;  }  

读取节点属性:

TiXmlElement *FirstElement = ParElement->FirstChildElement();cout<<FirstElement->Value()<<endl; //获取节点名字TiXmlAttribute *FirstAtt = FirstElement->FirstAttribute(); //获取属性cout<<FirstAtt->Value()<<endl;FirstAtt = FirstAtt->Next(); //下一个属性cout<<FirstAtt->Value()<<endl;


1 0