c++ Boost属性树通过属性限定符更新现有节点
C++ Boost Property Tree Update Existing Node By Attribute Qualifier
好的,这里有一个XML结构的示例:
<config>
<Ignored>
<Ignore name="Test A">
<Criteria>
<value>actual value</value>
</Criteria>
</Ignore>
<Ignore name="Test B">
<Criteria>
<value>actual value</value>
</Criteria>
</Ignore>
</Ignored>
<config>
我希望能做两件事:
- 直接对Test a元素执行get操作,而不必循环所有Ignore元素,就像属性上的选择器一样。
- 如果没有别的,我需要一个方法来更新忽略元素,似乎不能找出
我必须删除元素并重新创建它吗?我似乎找不到一种方法来执行一个放置,它通过一个属性(在该级别上是唯一的)来限定一个元素(在同一级别上有许多具有相同名称的元素)。
类似:
pt.put("config.Ignored.Ignore.<xmlattr>.name='Test A'.Criteria.value",some_var)
或者任何能达到最终目标的东西。非常感谢!
完全披露:我是c++的新手,可能会错过一些明显的东西。
property_tree xml解析器(RapidXML)不支持这个。
如果您想要这样的功能,可以考虑使用TinyXPath之类的工具。
或者使用显式循环查找具有所需属性的Ignore
节点。然后可以使用
someIgnoreNode.put("Criteria.value", some_var);
您可以使用如下方法:
auto & pt_child = pt.getchild("config.Ignored");
BOOST_FOREACH(ptree::value_type &v1, pt_child)
{
if (v1.first == Ignore && v1.second.get<std::string>("<xmlattr>.name") == "Test A")
{
ptree & ptGrandChild = v1.second;
ptGrandChild.put<std::string>("Criteria.value", some_var);
}
}
boost::property_tree::xml_writer_settings<std::string> settings =
boost::property_tree::xml_writer_make_settings<std::string>('t', 1);
write_xml(xmlPath, pt, std::locale(), settings);
相关文章:
- 从C++本机插件更新Vector3数组
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- 使用 RapidXML 更新C++中的 XML 节点和属性值
- 如何更新对象的属性
- 从高度动态的C 数据模型中更新QML:计时器与属性绑定
- MFC SDI在更改属性时从INI读取并更新视图字符串
- 更新对象的属性时遇到问题?
- C++(煤渣):无法在 keyDown 函数中更新对象的属性
- 在JIT期间更新方法属性
- 如何检查对象属性更新是否存在 std::map 键,否则插入一个新键?
- 指向节点的指针不更新节点属性
- c++ Boost属性树通过属性限定符更新现有节点
- C++使用set函数更新对象属性
- 通过回调更新类属性
- 更新矢量中的对象属性