最近项目中的某个功能需要写xml,由于项目中已经引入了tinyxml,所以不再寻找其他开源库。
前提:你得有个xml对象,声明tinyxml的对象:基于tinyxml的内存管理,TiXmlDocument xmlDoc这样定义更简单;
读:
(1)载入xml:
xmlDoc.LoadFile(filename, TIXML_ENCODING_UTF8);
(2)读根节点:
TiXmlElement* pRootEle = xmlDoc.RootElement();
(3)获取节点:
TiXmlElement* pCommEle = pRootEle->FirstChildElement(“test”);
(4)获取节点的属性:
pCommEle->Attribute(“mode”, &imode);
(5)获取节点的值:
pCommEle->FirstChild()->Value();
写:
要写入xml,首先要弄清楚xml的各个元素在tinyxml的定义。
TiXmlNode:节点;TiXmlComment:注释;TiXmlDeclaration:声明;TiXmlElement:元素;TiXmlText:文字
弄清楚概念后写入就简单了
(1)首先写入声明:
TiXmlDeclaration* pdecl = new TiXmlDeclaration("1.0", "utf-8", "");xmlDoc.LinkEndChild(pdecl);
(2)写入节点:
TiXmlElement* pESTimeEle = new TiXmlElement(“test”);pRootEle->LinkEndChild(pESTimeEle);
这里需要说明下:如果写入的是根节点,写入后显示:<test></test>
如果写入的是其他节点,写入后显示:<test />
如果要写入后显示<test></test>,则需要写入空的节点文本,具体操作见(5)
(3)写入注释:
TiXmlComment* pModeComm = new TiXmlComment(“中文”);pRootEle->LinkEndChild(pModeComm);
这里需要说明的是:如果要写入非英文字符,需要注意字符编码,因为声明中使用utf-8的编码,必须保持一致性。
(4)写入节点文本:
TiXmlText *pIpContent = new TiXmlText(“00”);pESTimeEle->LinkEndChild(pIpContent);
(5)写入节点属性:
pESTimeEle->SetAttribute(“mode”, 12);
(6)写完后保存:
xmlDoc.SaveFile(“test.xml”)
PS: TiXmlDocument对象建议在栈上申请,其他对象在堆上申请,且不用手工释放,最后析构TiXmlDocument对象时会自动释放。
其他的暂未使用,就不写出来误人子弟了。
欢迎看官们拍砖,已备好头盔。