zoukankan      html  css  js  c++  java
  • TinyXML2 使用

    TinyXML2

    TinyXML2
    TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手。
    这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。
    DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。

    在TinyXML中,根据XML的各种元素来定义了一些类:

    XmlBase:整个TinyXML模型的基类。
    XmlAttribute:对应于XML中的元素的属性。
    XmlNode:对应于DOM结构中的节点。
    XmlComment:对应于XML中的注释。
    XmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。
    XmlDocument:对应于XML的整个文档。
    XmlElement:对应于XML的元素。
    XmlText:对应于XML的文字部分。
    XmlUnknown:对应于XML的未知部分。 
    XmlHandler:定义了针对XML的一些操作。   
    

    Demo

    // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "tinyxml2.h"
    #include <iostream>
    
    
    using namespace tinyxml2;
    using namespace std;
    
    bool createXml(const char* savepath)
    {
    	XMLDocument *doc = new XMLDocument;
    	XMLDeclaration *declaration = doc->NewDeclaration("xml version="1.0" encoding="UTF-8"");
    	doc->LinkEndChild(declaration);
    
    	XMLElement *School = doc->NewElement("School");
    	doc->LinkEndChild(School);
    	School->SetAttribute("name","机械工程学院");
    
    	XMLElement *Class = doc->NewElement("Class");
    	School->LinkEndChild(Class);
    	Class->SetAttribute("name","c++");
    
    	XMLElement *Student = doc->NewElement("Student");
    	Class->LinkEndChild(Student);
    	Student->SetAttribute("name","天霸");
    	Student->SetAttribute("number", "01");
    
    	XMLElement *Email = doc->NewElement("Email");
    	Student->LinkEndChild(Email);
    	XMLText * email = doc->NewText("TB@126.com");
    	Email->LinkEndChild(email);
    
    	XMLElement *Address = doc->NewElement("Address");
    	Student->LinkEndChild(Address);
    	XMLText * address = doc->NewText("中国辽宁");
    	Address->LinkEndChild(address);
    
    	XMLElement *Student_1 = doc->NewElement("Student");
    	Class->LinkEndChild(Student_1);
    	Student_1->SetAttribute("name", "动霸");
    	Student_1->SetAttribute("number", "02");
    
    	XMLElement *Email_1 = doc->NewElement("Email");
    	Student_1->LinkEndChild(Email_1);
    	XMLText * email_1 = doc->NewText("DB@126.com");
    	Email_1->LinkEndChild(email_1);
    
    	XMLElement *Address_1 = doc->NewElement("Address");
    	Student_1->LinkEndChild(Address_1);
    	XMLText * address_1 = doc->NewText("中国香港");
    	Address_1->LinkEndChild(address_1);
    
    
    	if (XML_SUCCESS != doc->SaveFile(savepath)) {
    		delete doc;
    		return false;
    	}
    
    	delete doc;
    	return true;
    }
    
    bool readXml(const char* filename)
    {
    	XMLDocument doc;
    	if (XML_SUCCESS != doc.LoadFile(filename)) {
    		return false;
    	}
    
    	XMLElement *School = doc.RootElement();
    	if (School){
    		cout << "School:" << School->Attribute("name") << endl;
    
    		XMLElement *Class = School->FirstChildElement("Class");
    		while (Class) {
    			cout << "	Class:" << Class->Attribute("name") << endl;
    
    			XMLElement *Student = Class->FirstChildElement("Student");
    			while (Student) {
    				cout << "		Student:" << Student->Attribute("name") << ", " << Student->Attribute("number") << endl;
    
    				XMLElement* Email = Student->FirstChildElement("email");
    				if (Email){
    					cout << "		Email:" << Student->GetText() << endl;
    				}
    				XMLElement* Address = Student->FirstChildElement("address");
    				if (Address){
    					cout << "		Address:" << Address->GetText() << endl;
    				}
    				Student = Student->NextSiblingElement("Student");
    			}
    
    			Class = Class->NextSiblingElement();
    		}
    
    	}
    }
    
    
    int main()
    {
    	char * path = "d:/tmp.xml";
    	createXml(path);
    	readXml(path);
        return 0;
    }
    
    
  • 相关阅读:
    通过命令行指定 Java 程序运行时使用的字符集
    Ubuntu Linux 开启 root 用户及其它登录问题的解决
    SLF4J 的几种实际应用模式 SLF4J+Log4J 与 SLF4J+LogBack
    Java 获取当前时间的年月日方法
    Eclipse 全屏插件
    Linux 下的纯 C 日志函数库: zlog
    如何使用 Log4j
    DAO 设计模式
    为什么要用 /dev/null 2>&1 这样的写法
    NSDate和NSString之间的转换
  • 原文地址:https://www.cnblogs.com/chay/p/11491220.html
Copyright © 2011-2022 走看看