C++读取XML

本文主要介绍: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;

C++读取XML_第1张图片

你可能感兴趣的:(读取xml,tinyxml,C++读取XML,Tiny读取XML)