Tinyxml的简单用法
生成或解析的XML如下(代码的头文件未包含,只是测试,所以未检查空指针):
View Code
1 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 2 <Student> 3 <ComputerStu Name="Jack" Age="22" Sex="male"> 4 <Addr>Nan Jing City 5 <!--Student Address--> 6 </Addr> 7 <Tel>13856985695</Tel> 8 </ComputerStu> 9 <!--Computer Student--> 10 </Student>
创建XML代码如下:
View Code
1 #include "CreateCfgXml.h" 2 3 int CreateCfgXml::CreateXml() 4 { 5 //定义一个XML的文档对象。 6 TiXmlDocument* myDocument = new TiXmlDocument; 7 8 //定义XML的声明 9 TiXmlDeclaration* pDeclaration = new TiXmlDeclaration("1.0", "UTF-8", "yes"); 10 myDocument->LinkEndChild(pDeclaration); 11 12 13 //创建一个根元素并连接。 14 TiXmlElement* RootElement = new TiXmlElement("Student"); 15 myDocument->LinkEndChild(RootElement); 16 17 //创建一个ComputerStu元素,设置属性并连接。 18 TiXmlElement* ComElement = new TiXmlElement("ComputerStu"); 19 RootElement->LinkEndChild(ComElement); 20 ComElement->SetAttribute("Name", "Jack"); 21 ComElement->SetAttribute("Age", 22); 22 ComElement->SetAttribute("Sex", "male"); 23 24 TiXmlComment* StuComment = new TiXmlComment("Computer Student"); 25 RootElement->LinkEndChild(StuComment); 26 27 TiXmlElement* addrElment = new TiXmlElement("Addr"); 28 ComElement->LinkEndChild(addrElment); 29 TiXmlText* addrText = new TiXmlText("Nan Jing City"); 30 addrElment->LinkEndChild(addrText); 31 TiXmlComment* AddrComment = new TiXmlComment("Student Address"); 32 addrElment->LinkEndChild(AddrComment); 33 34 TiXmlElement* telElment = new TiXmlElement("Tel"); 35 ComElement->LinkEndChild(telElment); 36 TiXmlText* telText = new TiXmlText("13856985695"); 37 telElment->LinkEndChild(telText); 38 39 myDocument->SaveFile("test.xml");//保存到文件 40 //此处只删除文档类,它会自动删除下面申请的节点 41 if (NULL != myDocument) 42 { 43 delete myDocument; 44 myDocument = NULL; 45 } 46 47 return 0; 48 }
解析XML代码如下:
View Code
1 #include "ParseXml.h" 2 #include "tinyxml.h" 3 #include <iostream> 4 5 using std::cout; 6 7 int ParseXml::ParseCfgXml() 8 { 9 TiXmlDocument* myXmlDocument = new TiXmlDocument("test.xml"); 10 myXmlDocument->LoadFile(); 11 myXmlDocument->Print(); 12 13 //获取根节点,你也可以用FirstChildElement()来获取 14 TiXmlElement* rootElement = myXmlDocument->RootElement(); 15 TiXmlElement* StuElement = rootElement->FirstChildElement(); 16 //获取节点属性 17 TiXmlAttribute* StuAttr = StuElement->FirstAttribute(); 18 const char* Name = StuAttr->Value(); 19 StuAttr = StuAttr->Next(); 20 const char* Age = StuAttr->Value(); 21 StuAttr = StuAttr->Next(); 22 const char* Male = StuAttr->Value(); 23 24 cout<< "The Student is " << Name << ", Age is " << Age << ", Sex is " << Male << std::endl; 25 26 StuElement = StuElement->FirstChildElement(); 27 const char* Addr = StuElement->GetText(); 28 29 //获取注释 30 TiXmlNode* myNode = StuElement->LastChild(); 31 TiXmlComment* AddrComment = myNode->ToComment(); 32 const char* Comment = AddrComment->Value(); 33 34 cout << Comment << " is " << Addr << std::endl; 35 36 StuElement = StuElement->NextSiblingElement(); 37 const char* Tel = StuElement->GetText(); 38 39 cout << "The Tel is " << Tel << std::endl; 40 41 if (NULL != myXmlDocument) 42 { 43 delete myXmlDocument; 44 myXmlDocument = NULL; 45 } 46 return 0; 47 }