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;
    }
    
    
  • 相关阅读:
    前台 图片上传 上传预览 调用上传服务(多张图片展示)
    正则表达式验证,只能输入数字
    点击文本框搜索,出现在下拉列表中
    keycode 锁键盘按键(只能输入数字)
    Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
    map 理解
    mybatis 关联关系查询 java
    mybatis 批量插入值的sql
    EJB
    JPA概要
  • 原文地址:https://www.cnblogs.com/chay/p/11491220.html
Copyright © 2011-2022 走看看