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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章