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