如何使用boost::property_tree的put_value方法修改XML节点属性与元素
问题原因
boost::property_tree 解析XML时,所有标签属性都会被存到对应节点下名为 <xmlattr> 的特殊子节点中,你直接调用put_value修改的是
正确实现方案
你只需要通过属性的完整路径调用put方法修改即可,核心是要带上<xmlattr>特殊节点标识,示例实现如下:
#include <boost/property_tree/ptree.hpp> #include <boost/property_tree/xml_parser.hpp> #include <string> using namespace boost::property_tree; void update_sdf_model_name(const std::string& sdf_file_path, const std::string& object_name) { ptree pt; // 读取SDF文件,开启trim_whitespace避免空白节点干扰路径匹配 read_xml(sdf_file_path, pt, xml_parser::trim_whitespace); // 核心修改逻辑:路径根据你实际的SDF层级调整,标准SDF的根节点为sdf,下直接挂model节点 pt.put("sdf.model.<xmlattr>.name", object_name); // 写回文件,保留格式化缩进 write_xml(sdf_file_path, pt, std::locale(), xml_parser::format_indent); }
注意事项
- 如果你的
节点不是直接挂在sdf根节点下,需要根据实际嵌套层级补全路径前缀 - 如果存在多个
节点需要修改,可以先通过 get_child定位到对应model节点,再调用节点对象的put("<xmlattr>.name", object_name)修改即可
内容的提问来源于stack exchange,提问作者jabroni
相关产品推荐
相关产品推荐

