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