tinyxml2的使用说明

参考了这篇博客

tinyxml2安装

推荐使用vcpkg进行安装,关于vcpkg如何安装?
参考

https://docs.microsoft.com/zh-cn/cpp/build/install-vcpkg?view=msvc-160&tabs=macos#to-copy-and-set-up-vcpkg-on-windows

vcpkg如何使用?参考:

https://docs.microsoft.com/zh-cn/cpp/build/vcpkg-command-line-reference?view=msvc-160

tinyxml2库的基本说明

Element元素

每个元素都由两对尖括号围起来。格式如下

<元素名>这句话是当前元素的内容<\元素名>

整个xml文档一般都是元素套元素的结构,只有一个根元素,其他各元素都是根元素的子元素。

在tinyxml2中,XMLElement类的一个对象使用GetChildElement(param)方法获取指向子元素的指针。不传递参数时,默认返回第一个子元素的指针;传递一字符串指针时,返回第一个元素名与该字符串内容匹配的子元素的指针。

Attribute属性

在一对尖括号内部,分别是一个元素的名称(Name),属性(Attribute)和值(Value)。属性可以为空。示例如下

<元素名 属性1="属性1的值" 属性2="属性2的值" 属性3="属性3的值">

常用方法介绍

GetText()方法由XMLElement的对象调用,它获取的是当前元素内部除所有子元素之前的文本部分。例如下面的xml文档片段

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <TaskMsg>01015407
        <!-- 项目名称 -->
        <ProjectName/>
        <!-- 任务编号 -->
        <TaskMsgID>1000000001</TaskMsgID>
        <!-- 任务名称 -->
        <TaskMsgName>任务名称</TaskMsgName>
        <!-- 目标生产系统 -->
        <TaskMsgTo>SG</TaskMsgTo>
        <!--任务创建时间 -->
        <TaskCreateTime>2020-09-06 11:52:21</TaskCreateTime>
2333
    </TaskMsg>
    <Params>
    	<SubParam1>none</SubParam1>
    <Params>
</root>

调用eleRoot->FirstChildElement("TaskMsg")->GetText()返回的字符串为“01015407”;

例程

写xml文件

// 创建xml文件
#include<tinyxml2.h>

string filename="test.xml";

int main()
{
	tinyxml2::XMLDocument docXml;
	// 添加声明
	tinyxml2::XMLDeclaration* declaration = docXml.NewDeclaration();
	docXml.InsertFirstChild(declaration);
	// 创建根节点
	tinyxml2::XMLElement* e_root = docXml.NewElement("AdjustmentOptions");
	docXml.InsertEndChild(e_root);
	// 给根节点添加新的子节点
	tinyxml2::XMLElement* e_AdjType = e_root->InsertNewChildElement("AdjustmentType");
	e_AdjType->SetText(adj_flag);
	tinyxml2::XMLElement* init_eo = e_root->InsertNewChildElement("InitialEOPFile");
	init_eo->SetText(eoname.c_str());
	tinyxml2::XMLElement* e_init_cam = e_root->InsertNewChildElement("InitialCameraFile");
	e_init_cam->SetText(cmrname.c_str());
	tinyxml2::XMLElement* e_max_iter = e_root->InsertNewChildElement("MaxIterNumber");
	e_max_iter->SetText(max_iter);
	tinyxml2::XMLElement* e_weightXYZ = e_root->InsertNewChildElement("WeightGPS");
	e_weightXYZ->SetText(weightXYZ);
	// 保存文件
	docXml.SaveFile(opt_file.c_str());
	return 0;
}

读xml文件

// 读取xml文件
#include<tinyxml2.h>

string filename="test.xml";

int main()
{
	tinyxml2::XMLDocument expXml;
	tinyxml2::XMLError err = expXml.LoadFile(filename.c_str());

	if (tinyxml2::XML_SUCCESS == err)
	{
		tinyxml2::XMLElement* elmtRoot = expXml.RootElement();

		tinyxml2::XMLElement* ID1 = elmtRoot->FirstChildElement("TaskMsg");
		tinyxml2::XMLElement* ID2 = elmtRoot->FirstChildElement("InputParams");
		tinyxml2::XMLElement* ID3 = elmtRoot->FirstChildElement("OutParams");

		const tinyxml2::XMLElement* prjname =ID1->FirstChildElement("ProjectName")->NextSiblingElement(); //ID1->FirstAttribute();
		const char* pTName = prjname->GetText();
		const char* pTitle = prjname->Name();
		pTitle = prjname->Value();

		const tinyxml2::XMLAttribute* ID1_2 = ID2->FirstAttribute();
		std::cout << ID1_2->Name() << ":" << ID1_2->Value() << std::endl;
		const tinyxml2::XMLAttribute* ID1_2_1 = ID2->FirstAttribute()->Next();
		std::cout << ID1_2_1->Name() << ":" << ID1_2_1->Value() << std::endl;
		const tinyxml2::XMLAttribute* ID1_2_2 = ID2->FirstAttribute()->Next()->Next();
		std::cout << ID1_2_2->Name() << ":" << ID1_2_2->Value() << std::endl;

		const tinyxml2::XMLAttribute* ID1_3 = ID3->FirstAttribute();
		std::cout << ID1_3->Name() << ":" << ID1_3->Value() << std::endl;

		const tinyxml2::XMLAttribute* ID1_3_1 = ID3->FirstAttribute()->Next();
		std::cout << ID1_3_1->Name() << ":" << ID1_3_1->Value() << std::endl;

		const char* pContent1 = ID1->GetText();
		std::cout << "TaskMsg: " << pContent1 << std::endl;

		const char* pContent2 = ID2->GetText();
		std::cout << "InputParams: " << pContent2 << std::endl;

		const char* pContent3 = ID3->GetText();
		std::cout << "OutParams: " << pContent3 << std::endl;
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐