You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 05:51:03