TiXml進行了簡單的應用,這裏簡單地記錄一下用法。
加載文件:
bool loadXmlFile(const char* filename)
{
TiXmlDocument tiXml;
if (!tiXml.LoadFile(filename))
return false;
return true;
}
加載文件比較簡單,直接調用LoadFile()函數就行了。後面的內容基於如下的xml文件內容進行操作:
<hh_xml>
<filename>girls.jpg</filename>
<path>D:/11/girls.jpg</path>
<source>
<db>Unknown</db>
</source>
<size>
<width>120</width>
<height>88</height>
</size>
<object>
<name>item1</name>
<camer>Mi2</camer>
<color>red</color>
<area>
<xmin>12</xmin>
<ymin>53</ymin>
<xmax>34</xmax>
<ymax>74</ymax>
</area>
<hair>1</hair>
<layer>3</layer>
</object>
</hh_xml>
各操作如下的樣子:
// 獲取根項
TiXmlElement* rootEle = tiXml.RootElement();
if (rootEle == NULL)
return false;
// 獲取根項下的object項
TiXmlElement* bdEle = rootEle->FirstChildElement("object");
// 獲取第二個object項,這裏只爲演示,實際用的時候所有的都要判斷是否爲NULL
dbEle = (TiXmlElement*)bdEle->NextSibling();
// 獲取object下的一個屬性
TiXmlElement* prpEle = (TiXmlElement*)bdEle->FirstChild("path");
// 獲取一個不存在的項
prpEle = (TiXmlElement*)bdEle->FirstChild("howfar");
if (prpEle == NULL)
{
// 不存在,就加入一個新項
prpEle = new TiXmlElement("howfar");
bdEle->LinkEndChild(prpEle);
TiXmlText* tiVal = new TiXmlText("800cm");
prpEle->LinkEndChild(tiVal);
}
else
{
// 存在,修改它的值
TiXmlElement* valPtr = (TiXmlElement*)prpEle->FirstChild();
valPtr->SetValue("750cm");
}
// 保存到原始文件中
if (!tiXml.SaveFile())
return false;
以上對簡單的操作進行了演示,注意,代碼中沒有判斷是否成功,實際使用時,必需進行判斷。
第一遍不存在的howfar,xml的結果如下:
...
<object>
<name>item1</name>
<camer>Mi2</camer>
<color>red</color>
<area>
<xmin>12</xmin>
<ymin>53</ymin>
<xmax>34</xmax>
<ymax>74</ymax>
</area>
<hair>1</hair>
<layer>3</layer>
<howfar>800cm</howfar>
</object>
...
第二遍的時候,howfar已經存在,則它的值會被修改成750cm,如下所示:
...
<object>
<name>item1</name>
<camer>Mi2</camer>
<color>red</color>
<area>
<xmin>12</xmin>
<ymin>53</ymin>
<xmax>34</xmax>
<ymax>74</ymax>
</area>
<hair>1</hair>
<layer>3</layer>
<howfar>750cm</howfar>
</object>
...
這個演示中,包含的功能有:
加載文件、保存文件、獲取根節點、獲取子節點、獲取第二個子節點、新加入一個項、修改一個項的值