TiXml 應用筆記

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>
...

這個演示中,包含的功能有:

加載文件、保存文件、獲取根節點、獲取子節點、獲取第二個子節點、新加入一個項、修改一個項的值

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