如何重命名提升属性树中的节点/元素?
Posted
技术标签:
【中文标题】如何重命名提升属性树中的节点/元素?【英文标题】:How to rename node/element in boost property tree? 【发布时间】:2015-06-03 22:07:39 【问题描述】:例如,我有以下结构的 boost 属性树(通过使用 xml 或其他方式读取流创建):
<A>
<B>
<C></C>
</B>
</A>
如何将 现有 树元素 B 重命名为具有新键的新元素:N。因此,调用此固定树的 write_xml 应该会给出新的 xml 结构:
<A>
<N>
<C></C>
</N>
</A>
如果可能,请提供代码或解释原因。 备注:将C下的子树附加到新生成的根也可以,但优先直接重命名。
【问题讨论】:
工资多少? 2 天内有资格获得赏金的问题。为了钱,我通常自己编写代码。 我在嘲笑你自己显示零代码的事实。大量干巴巴的要求使这看起来像是工作。 Anyhoops,不需要更多虚构的互联网点 :) 干杯 【参考方案1】:那么,这是可能的。 发送检查代码
Live On Coliru
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <iostream>
using boost::property_tree::ptree;
int main()
std::istringstream iss(R"(<A><B><C></C></B></A>)");
ptree pt;
read_xml(iss, pt);
pt.add_child("A.N", pt.get_child("A.B"));
pt.get_child("A").erase("B");
write_xml(std::cout, pt);
打印
<?xml version="1.0" encoding="utf-8"?>
<A><N><C/></N></A>
【讨论】:
我认为有一些评论和聊天相关的徽章(想到了Pundit) 是否会在丢弃 A.B 之前将 A.B (深度)复制到 A.N?如果有,是否有带有移动语义的版本? @gg99 Boost 属性树不支持移动。 (太老)。使用底层容器(Boost Multi-Index),您可以通过各种优雅的方式实现效果,但这需要深入了解该库的实现细节。然而,这些都不重要,因为 Boost Property Tree 既不是为任何对性能敏感的东西而设计的,也不适合任何对性能敏感的东西。当人们想用它做低纬度的事情时,他们总是应该使用一个好的 JSON 或 XML 库来代替。以上是关于如何重命名提升属性树中的节点/元素?的主要内容,如果未能解决你的问题,请参考以下文章