boost读取xml文件

1 篇文章 0 订阅

参考:https://www.2cto.com/kf/201210/162103.html
在这里插入图片描述
conf.xml 注:文件放在当前项目根就行了

<?xml version="1.0" encoding="utf-8"?>
<root> 
  <strage name="asd" alias="13" classId="13.22">r 
    <id>12</id>   
    <name>"jack"</name>   
    <accout>"0001"</accout> 
  </strage> 
 <strage name="abbasd" alias="14" classId="14.22">abb 
    <id >13</id>   
    <name>"toni"</name>   
    <accout>"0002"</accout> 
  </strage> 
 <strage name="assasd" alias="15" classId="15.44">ass 
    <id >14</id>   
    <name>"hate"</name>   
    <accout>"0003"</accout> 
  </strage> 
</root> 

main.cpp

#include <boost/property_tree/ptree.hpp> 
#include <boost/property_tree/xml_parser.hpp> 
#include <boost/algorithm/string.hpp> 
#include <boost/foreach.hpp> 

#include <string> 
#include <set> 
#include <vector> 
#include <exception> 

#include <iostream> 
using namespace std;

const std::string str_node_name[] = { "id", "name", "accout" };

struct xmlStageDetail
{
	std::string id;
	std::string name;
	std::string accout;
};


int load(const char* filename, std::vector<xmlStageDetail>*m_xml_detail)

{
	xmlStageDetail xml_stage_detail;
	using boost::property_tree::ptree;
	ptree pt;
	ptree root;
	try
	{
		read_xml(filename, pt);
		root = pt.get_child("root");
	}
	catch (std::exception& e)
	{
		std::cout << "Error: " << e.what() << endl;
		return -1;
	}

	std::cout << "root的长度:" << root.size() << endl;

	/*******************************************************/
	int ita = pt.get<int>("root.strage.id");
	std::string cattr = pt.get<string>("root.strage.<xmlattr>.name");
	/***************************************************************/
	std::cout << "root.strage.id:" << ita << "\nroot.strage.<xmlattr>.name:" << cattr << endl;

	for (ptree::iterator itr = root.begin(); itr != root.end(); itr++)
	{
		ptree strage = itr->second;
		std::string ssv = strage.data();

		std::string sattr = strage.get<string>("<xmlattr>.name");
		int iattr = strage.get<int>("<xmlattr>.alias");
		float fattr = strage.get<float>("<xmlattr>.classId");

		// 去除首尾空格 
		boost::trim<std::string>(ssv); 

		std::cout << endl;
		std::cout << ssv <<endl<< "name:" << sattr << "\talias:" << iattr << "\tclassid:" << fattr << endl;
		for (int i = 0; i < root.size(); i++)
		{
			ptree pt;
			std::string str_value;
			try
			{
				pt = strage.get_child(str_node_name[i]);
				str_value = pt.data();
				std::cout << str_value << "\t";
			}
			catch (std::exception& e)
			{
				cout << str_value << "解析错误:" << e.what() << endl;
				return -1;
			}
			switch (i)

			{
			case 0:
				xml_stage_detail.id = str_value;
				break;
			case 1:
				xml_stage_detail.name = str_value;
				break;

			case 2:
				xml_stage_detail.accout = str_value;
				break;
			}
		}
		m_xml_detail->push_back(xml_stage_detail);
		std::cout << endl;
	}
	return 0;
}
int main()

{
	vector<xmlStageDetail>m_xml_detail;
	try
	{
		load("conf.xml", &m_xml_detail);
		std::cout << "Success\n";
		std::cout << endl;
	}
	catch (std::exception &e)
	{
		std::cout << "Error: " << e.what() << endl;
		std::cout << endl;
		return -1;
	}
	system("pause");
	return 0;
}

效果图
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要修改一个 XML 文件中的某一项,可以使用 Boost XML 库提供的 API 来实现: 1. 首先,需要读取 XML 文件,并将其解析为 XML 对象,可以使用 `boost::property_tree::xml_parser::read_xml` 函数来实现。 ```c++ boost::property_tree::ptree pt; boost::property_tree::xml_parser::read_xml("example.xml", pt); ``` 2. 然后,需要找到需要修改的 XML 节点,可以使用 `boost::property_tree::ptree::get_child` 函数获取指定节点的子节点。 ```c++ boost::property_tree::ptree& node = pt.get_child("root.node_to_modify"); ``` 3. 接下来,可以通过修改节点的值来对其进行修改。 ```c++ node.put_value("new_value"); ``` 4. 最后,需要将修改后的 XML 对象重新写入文件,可以使用 `boost::property_tree::xml_parser::write_xml` 函数来实现。 ```c++ boost::property_tree::xml_parser::write_xml("example.xml", pt); ``` 完整的代码如下: ```c++ #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/xml_parser.hpp> #include <iostream> int main() { boost::property_tree::ptree pt; boost::property_tree::xml_parser::read_xml("example.xml", pt); boost::property_tree::ptree& node = pt.get_child("root.node_to_modify"); node.put_value("new_value"); boost::property_tree::xml_parser::write_xml("example.xml", pt); return 0; } ``` 注意,以上代码只是修改了内存中的 XML 对象,并没有直接修改文件。如果需要直接修改文件,可以在写入文件之前先将原文件备份,然后再写入修改后的 XML 对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值