C++写XML

本文主要介绍:C++中利用TinyXml库写XML文件。
一、TinyXml库配置
详细配置见:
http://blog.csdn.net/hong__fang/article/details/43340191
二、写XML文件程序
1.TinyXml中的一些类:
TiXmlBase:整个TinyXML模型的基类。
TiXmlAttribute:对应于XML中的元素的属性。
TiXmlNode:对应于DOM结构中的节点。
TiXmlComment:对应于XML中的注释
TiXmlDeclaration:对应于XML中的申明部分,即<?versiong=”1.0″ ?>。
TiXmlDocument:对应于XML的整个文档。
TiXmlElement:对应于XML的元素。
TiXmlText:对应于XML的文字部分
TiXmlUnknown:对应于XML的未知部分。
TiXmlHandler:定义了针对XML的一些操作。
2.写XML程序:

BOOL WriteXml(string savePath)
{ 

    TiXmlDeclaration * xmlDec = new TiXmlDeclaration("1.0", "gb2312","");  //对应XML声明部分
    TiXmlDocument * xmlDoc = new TiXmlDocument();   //对应整个XML文档
    xmlDoc->LinkEndChild(xmlDec);

    TiXmlElement * node = new TiXmlElement("Node");   //创建根节点
    xmlDoc->LinkEndChild(node);

    char temp[30];

    //创建对象节点
    TiXmlElement * object = new TiXmlElement("Object");   //对于XML元素
    node->LinkEndChild(object);

    ///////////////创建对象节点的子节点/////////////////////////

    //创建区域号节点
    TiXmlElement *ID = new TiXmlElement("ID"); //创建区域号节点
    object->LinkEndChild(ID);
    ID->SetAttribute("type","int"); //设置节点属性
    ID->SetAttribute("describe","区域号");
    TiXmlText * IDtext = new TiXmlText("123");   //设置节点值
    ID->LinkEndChild(IDtext);


    //创建像素个数节点
    TiXmlElement *pixNum = new TiXmlElement("PixelNum"); //创建像素个数节点
    object->LinkEndChild(pixNum);
    pixNum->SetAttribute("type","int"); //设置节点属性
    pixNum->SetAttribute("describe","像素个数");
    TiXmlText * pixNumtext = new TiXmlText("100");   //设置节点值
    pixNum->LinkEndChild(pixNumtext);

    //创建波段像素和节点
    TiXmlElement *bandSum = new TiXmlElement("BandSum"); //创建波段和节点
    object->LinkEndChild(bandSum);

    //创建波段平方和节点
    TiXmlElement *bandSqSum = new TiXmlElement("BandSquareSum"); //创建波段和节点
    object->LinkEndChild(bandSqSum);

    ///////////////创建像素和、像素平方和节点的子节点/////////////////////////
    for(int i=0; i<3; i++)
    {
        sprintf_s(temp,"band%d",i+1);//int转char*
        //波段和节点
        TiXmlElement *band = new TiXmlElement(temp); 
        bandSum->LinkEndChild(band);
        band->SetAttribute("type","int"); //设置节点属性
        band->SetAttribute("describe","波段和");
        TiXmlText * bandtext = new TiXmlText("100");   //设置节点值
        band->LinkEndChild(bandtext);

        //波段平方和节点
        TiXmlElement *bandSq = new TiXmlElement(temp); 
        bandSqSum->LinkEndChild(bandSq);
        bandSq->SetAttribute("type","int"); //设置节点属性
        bandSq->SetAttribute("describe","波段平方和");
        TiXmlText * bandSqtext = new TiXmlText("100");   //设置节点值
        bandSq->LinkEndChild(bandSqtext);

    }

    //创建外接矩形节点
    TiXmlElement *outRect = new TiXmlElement("outRectangle"); //创建波段和节点
    object->LinkEndChild(outRect);

    ///////////////创建外接矩形节点的子节点/////////////////////////
    string strRect[4] ={"左上角x", "左上角y", "右下角x","右下角y"};
    string strName[4] ={"LeftX", "LeftY", "RightX", "RightY"};
    for(int i=0;i<4;i++)
    {
        TiXmlElement *rectPt = new TiXmlElement(strName[i].c_str());
        outRect->LinkEndChild(rectPt);

        rectPt->SetAttribute("type","int"); //设置节点属性
        rectPt->SetAttribute("describe",strRect[i].c_str());
        TiXmlText * rectPttext = new TiXmlText("100");   //设置节点值
        rectPt->LinkEndChild(rectPttext);

    }

    xmlDoc->SaveFile(savePath.c_str());
    delete xmlDoc;

    return TRUE;
}

注:1.CString为MFC中的字符串类,如果非MFC工程,可以改成string或char*类型。
2.程序对多字节字符集和Unicode字符集均适用。
3.string要加命名空间:using namespace std
三、生成的xml文件

<?xml version="1.0" encoding="gb2312" ?>
<Node>
    <Object>
        <ID type="int" describe="区域号">123</ID>
        <PixelNum type="int" describe="像素个数">100</PixelNum>
        <BandSum>
            <band1 type="int" describe="波段和">100</band1>
            <band2 type="int" describe="波段和">100</band2>
            <band3 type="int" describe="波段和">100</band3>
        </BandSum>
        <BandSquareSum>
            <band1 type="int" describe="波段平方和">100</band1>
            <band2 type="int" describe="波段平方和">100</band2>
            <band3 type="int" describe="波段平方和">100</band3>
        </BandSquareSum>
        <outRectangle>
            <LeftX type="int" describe="左上角x">100</LeftX>
            <LeftY type="int" describe="左上角y">100</LeftY>
            <RightX type="int" describe="右下角x">100</RightX>
            <RightY type="int" describe="右下角y">100</RightY>
        </outRectangle>
    </Object>
</Node>

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