tinyxml2的使用说明

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;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值