TinyXML解析案例详解 C++
C++,TinyXML解析案例详解,博智网带你了解详细信息 。
目录
- TinyXML介绍
- TinyXML类说明
- 下载和编译
- 简单的例子
- 读取XML
- 写入xml
- XML删除操作
- XML修改操作
TinyXML介绍最近做一个负载均衡的小项目,需要解析xml配置文件,用到了TinyXML,感觉使用起来很容易,给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完成 。
TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译 。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树 。
DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系 。
TinyXML类说明在TinyXML中,根据XML的各种元素来定义了一些类:
TiXmlBase:整个TinyXML模型的基类 。
TiXmlAttribute:对应于XML中的元素的属性 。
TiXmlNode:对应于DOM结构中的节点 。
TiXmlComment:对应于XML中的注释 。
TiXmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?> 。
TiXmlDocument:对应于XML的整个文档 。
TiXmlElement:对应于XML的元素 。
TiXmlText:对应于XML的文字部分 。
TiXmlUnknown:对应于XML的未知部分 。
TiXmlHandler:定义了针对XML的一些操作 。
下载和编译下载地址:http://sourceforge.net/projects/tinyxml/
工作目录为:
tinyxml///工作目录|-- include//头文件根目录||-- tinyxml//tinyxml头文件,包括tinystr.h tinyxml.h|-- src//cpp源码文件根目录|-- tinyxml//tinyxml源码文件夹,包括tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp|-- main.cpp//我们的主函数,调用tinyxml的示例代码|-- conf//我们示例中用的xml文件所在的文件夹|-- makefile//makefile,不用我们多说了吧,不懂请看我博客的makefile最佳实践
简单的例子在conf目录下建立student.xml代码
<School name="软件学院"><Class name = "C++"><Student name="tinyxml" number="123"><email>tinyxml@163.com</email><address>中国</address></Student><Student name="jsoncpp" number="456"><email>jsoncpp@gmail.com</email><address>美国</address></Student></Class></School>
想要使用tinyxml,只需要在头文件中包含<tinyxml.h>即可
读取整个xml文件并打印代码:
void printSchoolXml() {using namespace std;TiXmlDocument doc;const char * xmlFile = "conf/school.xml";if (doc.LoadFile(xmlFile)) {doc.Print();} else {cout << "can not parse xml conf/school.xml" << endl;}}
读取XMLvoid readSchoolXml() {using namespace std;const char * xmlFile = "conf/school.xml";TiXmlDocument doc;if (doc.LoadFile(xmlFile)) {doc.Print();} else {cout << "can not parse xml conf/school.xml" << endl;return;}TiXmlElement* rootElement = doc.RootElement();//School元素TiXmlElement* classElement = rootElement->FirstChildElement();// Class元素TiXmlElement* studentElement = classElement->FirstChildElement();//Studentsfor (; 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 = https://www.yf-zs.com/redian/studentContactElement->GetText();cout << contactType<<" : " << contactValue << std::endl;}} }
写入xmlvoid 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", "tinyxml");stu1Element->SetAttribute("number", "123");TiXmlElement * stu1EmailElement = new TiXmlElement("email");stu1EmailElement->LinkEndChild(new TiXmlText("tinyxml@163.com") );TiXmlElement * stu1AddressElement = new TiXmlElement("address");stu1AddressElement->LinkEndChild(new TiXmlText("中国"));stu1Element->LinkEndChild(stu1EmailElement);stu1Element->LinkEndChild(stu1AddressElement);TiXmlElement * stu2Element = new TiXmlElement("Student");stu2Element->SetAttribute("name", "jsoncpp");stu2Element->SetAttribute("number", "456");TiXmlElement * stu2EmailElement = new TiXmlElement("email");stu2EmailElement->LinkEndChild(new TiXmlText("jsoncpp@163.com"));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);}
推荐阅读
- 2003年生肖属羊人一生命运解析
- 属龙人运势解析
- 深度解析天蝎女是什么性格
- 域名解析是什么
- 绿春玛玉茶 茶友解析:绿春玛玉茶
- 说明方法有哪些 小学语文常见的说明方法解析
- 深度解析天蝎女
- 如何删除域名解析
- 直线AB是什么线
- 正方形什么相等
