TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手。
这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。
TinyXML版本:tinyxml_2_6_2
运行环境windows
里面有两个头文件 tinystr.h tinyxml.h
四个源文件 tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp
一个测试test文件 xmltest.cpp
TiXmlBase:整个TinyXML模型的基类。 TiXmlAttribute:对应于XML中的元素的属性。 TiXmlNode:对应于DOM结构中的节点。 TiXmlComment:对应于XML中的注释。 TiXmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。 TiXmlDocument:对应于XML的整个文档。 TiXmlElement:对应于XML的元素。 TiXmlText:对应于XML的文字部分。 TiXmlUnknown:对应于XML的未知部分。 TiXmlHandler:定义了针对XML的一些操作。
建立一个简单的XML
<?xml version="1.0" encoding="UTF-8"?> <School name="计算机学院"> <Class name = "C++"> <Student name="王玲" number="052140"> <email>[email protected]</email> <address>河南</address> </Student> <Student name="宋军" number="024561"> <email>[email protected]</email> <address>河北</address> </Student> </Class> </School>
读取操作
void __fastcall TForm1::readSchoolXml() { using namespace std; const char * xmlFile = "studentConfig.xml"; TiXmlDocument doc; if (doc.LoadFile(xmlFile)) { doc.Print(); } else { cout << "can not parse xml studentConfig.xml" << endl; return; } TiXmlElement* rootElement = doc.RootElement(); //School元素 TiXmlElement* classElement = rootElement->FirstChildElement(); // Class元素 TiXmlElement* studentElement = classElement->FirstChildElement(); //Students for (; studentElement != NULL; studentElement = studentElement->NextSiblingElement() ) { TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute(); //获得student的name属性 for (;attributeOfStudent != NULL; attributeOfStudent = attributeOfStudent->Next() ) { cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl; } TiXmlElement* studentContactElement = studentElement->FirstChildElement();//获得student的第一个联系方式 for (; studentContactElement != NULL; studentContactElement = studentContactElement->NextSiblingElement() ) { string contactType = studentContactElement->Value(); string contactValue = studentContactElement->GetText(); std::cout << contactType << " : " << contactValue << std::endl; } } }
存储操作
void __fastcall TForm1:: writeSchoolXml() { using namespace std; const char * xmlFile = "conf/school-write.xml"; TiXmlDocument doc; TiXmlDeclaration * decl = new TiXmlDeclaration("1.0", "", ""); TiXmlElement * schoolElement = new TiXmlElement( "School" ); TiXmlElement * classElement = new TiXmlElement( "Class" ); classElement->SetAttribute("name", "C++"); TiXmlElement * stu1Element = new TiXmlElement("Student"); stu1Element->SetAttribute("name", "王玲"); stu1Element->SetAttribute("number", "052140"); TiXmlElement * stu1EmailElement = new TiXmlElement("email"); stu1EmailElement->LinkEndChild(new TiXmlText("[email protected]") ); TiXmlElement * stu1AddressElement = new TiXmlElement("address"); stu1AddressElement->LinkEndChild(new TiXmlText("河南")); stu1Element->LinkEndChild(stu1EmailElement); stu1Element->LinkEndChild(stu1AddressElement); TiXmlElement * stu2Element = new TiXmlElement("Student"); stu2Element->SetAttribute("name", "宋军"); stu2Element->SetAttribute("number", "024561"); TiXmlElement * stu2EmailElement = new TiXmlElement("email"); stu2EmailElement->LinkEndChild(new TiXmlText("[email protected]")); TiXmlElement * stu2AddressElement = new TiXmlElement("address"); stu2AddressElement->LinkEndChild(new TiXmlText("河北")); stu2Element->LinkEndChild(stu2EmailElement); stu2Element->LinkEndChild(stu2AddressElement); classElement->LinkEndChild(stu1Element); classElement->LinkEndChild(stu2Element); schoolElement->LinkEndChild(classElement); doc.LinkEndChild(decl); doc.LinkEndChild(schoolElement); doc.SaveFile(xmlFile); }
时间: 2024-10-18 18:46:40