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>
...
这个演示中,包含的功能有:
加载文件、保存文件、获取根节点、获取子节点、获取第二个子节点、新加入一个项、修改一个项的值