将具有相同键的节点添加到属性树中

2024-04-02

我正在使用 Boost 的属性树来读取和写入 XML。使用我制作的电子表格应用程序,我想将电子表格的内容保存到 xml。这是一项学校作业,因此我需要使用以下 XML 格式:

<?xml version="1.0" encoding="UTF-8"?>
<spreadsheet>
   <cell>
      <name>A2</name>
      <contents>adsf</contents>
   </cell>
   <cell>
      <name>D6</name>
      <contents>345</contents>
   </cell>
   <cell>
      <name>D2</name>
      <contents>=d6</contents>  
   </cell>
</spreadsheet>

对于一个简单的测试程序,我编写了:

int main(int argc, char const *argv[])
{
boost::property_tree::ptree pt;

pt.put("spreadsheet.cell.name", "a2");
pt.put("spreadsheet.cell.contents", "adsf");

write_xml("output.xml", pt);

boost::property_tree::ptree ptr;
read_xml("output.xml", ptr);

ptr.put("spreadsheet.cell.name", "d6");
ptr.put("spreadsheet.cell.contents", "345");
ptr.put("spreadsheet.cell.name", "d2");
ptr.put("spreadsheet.cell.contents", "=d6");

write_xml("output2.xml", ptr);

return 0;
}

基于此question https://stackoverflow.com/questions/15413022/how-to-create-xml-using-boost-property-tree我看到put方法替换该节点上的任何内容,而不是添加新节点。这正是我所看到的功能:

输出.xml

<?xml version="1.0" encoding="utf-8"?>
<spreadsheet>
  <cell>
    <name>a2</name>
    <contents>adsf</contents>
  </cell>
</spreadsheet>

输出2.xml

<?xml version="1.0" encoding="utf-8"?>
<spreadsheet>
  <cell>
    <name>d2</name>
    <contents>=d6</contents>
  </cell>
</spreadsheet>

看着文档 http://www.boost.org/doc/libs/1_43_0/doc/html/boost/property_tree/basic_ptree.html#id906314-bb我看到这个add_child方法将Add the node at the given path. Create any missing parents. If there already is a node at the path, add another one with the same key.

我不太明白如何使用它add_child方法,有人能解释一下如何使用它吗?

有没有更好的方法来实现我想要的文件格式?


The add_child成员函数允许您插入一个property_tree作为子节点进入另一个 DOM。如果您提供的密钥路径已存在,则会添加重复的密钥,并将子密钥插入其中。如果我们稍微改变一下你的例子,我们就可以检查结果。

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>

int main()
{
    // Create the first tree with two elements, name and contents
    boost::property_tree::ptree ptr1;
    ptr1.put("name", "a2");
    ptr1.put("contents", "adsf");

    // Create the a second tree with two elements, name and contents
    boost::property_tree::ptree ptr2;
    ptr2.put("name", "d6");
    ptr2.put("contents", "345");

    // Add both trees to a third and place them in node "spreadsheet.cell"
    boost::property_tree::ptree ptr3;
    ptr3.add_child("spreadsheet.cell", ptr1);
    ptr3.add_child("spreadsheet.cell", ptr2);

    boost::property_tree::write_xml("output.xml", ptr3);

    return 0;
}

你打电话时add_child第一次,键“spreadsheet.cell”的节点不存在并被创建。然后它添加树的内容(name and contents) 到新创建的节点。你打电话时add_child第二次看到“spreadsheet.cell”已经存在,但与put它创建一个也称为“单元”的同级节点并将其插入到同一位置。

最终输出:

<?xml version="1.0" encoding="utf-8"?>
<spreadsheet>
  <cell>
    <name>a2</name>
    <contents>adsf</contents>
  </cell>
  <cell>
    <name>d6</name>
    <contents>345</contents>
  </cell>
</spreadsheet>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将具有相同键的节点添加到属性树中 的相关文章

随机推荐

  • Kendo TreeView 搜索并突出显示

    我有一个带有 spriteclass 的 KendoTreeview 我想用我的搜索词突出显示节点 根节点和子节点 我已经实现了搜索功能 但是当我搜索它时 问题是突出显示节点中的术语 但在第一次搜索后缺少节点中的 SpriteClass 任
  • UITabBarItem 图标动画

    iPhone 版 Skype 应用程序使用动画 TabBar 图标 例如 在登录期间 最右侧的选项卡图标显示循环箭头 呼叫 呼叫 选项卡时 图标会轻轻闪烁 这显然是通过动画完成的 我想知道如何为选项卡栏项目的图标设置动画 在我的特殊情况下
  • 如何使用Abdera Atom客户端发送内容和附件

    我们正在使用Abdera https abdera apache org 与 IBM Connections API 交互 但我们的问题主要与 Abdera 本身有关 我认为 Abdera 中存在一个错误 不允许您在单个请求中发送包含内容和
  • VScode 的扩展,用于查找 Nodejs 应用程序中未使用的公共函数

    我需要 VScode 扩展来查找 Nodejs 应用程序中未使用的公共函数 答案已被接受 如果有人正在寻找更详细的步骤 请阅读以下内容 STEP 1 添加这个ESLint https marketplace visualstudio com
  • 安全地使用 PHP exec 函数

    我正在编写一个 PHP 脚本 旨在通过 exec 函数运行可执行文件 ffmpeg exe 问题是我已经读到使用 exec 函数可能存在安全风险 应该尽可能避免 我一直在研究如何安全地运行 exec 函数 唯一遇到的问题是使用 escape
  • 在docker容器内运行pulseaudio来录制系统音频

    我正在尝试使用 Selenium 设置一个 Docker 容器 该容器使用 ffmpeg 录制带有系统音频的浏览器 我使用 Xvfb 处理视频 不幸的是 在音频方面 这似乎更加棘手 我想我应该在容器内设置一个虚拟的脉冲音频接收器 这将允许我
  • 如何使用 haskell graphViz 绘制图表

    我计划使用 Haskell graphViz 绘制图表 我是 Haskell 的新手 所以这对我来说相当困难 有人可以给我看一个简单的例子吗 实际上我需要一个非常简单的示例 以便我可以理解它并在我正在处理的场景中使用它 我在尝试安装 Cha
  • 自定义调整后的生存曲线中的线型 ggadjustedcurves (survminer, ggplot2)

    我正在尝试绘制调整后的生存曲线 但正在努力按组更改线类型 我可以使用典型的 ggplot2 语言自定义绘图的其他方面 但我在改变线型方面遇到了困难 Example library survival library survminer fit
  • 使用 CSS 突出显示所选行

    我们如何使用 css 突出显示表格中的选定行 有什么办法可以做到这一点吗 假设 选定 的意思是 用鼠标悬停在上面 tr hover background color FF0000 您还可以使用 font weight bold color
  • Javascript API - 通过向用户提供白名单选项来限制域

    我的应用程序提供了一个 API 密钥和 Javascript 代码以放置在其网站上 类似于 google anayytics 代码 API 中的所有调用都使用 JSONP 与我们的服务器进行通信 由于 API 密钥很敏感 我们的用户会回来要
  • 如何转换条形图的 y 轴 (ggplot2)

    样本数据test a b c 1 a x NA 2 b x 5 1e 03 3 c x 2 0e 01 4 d x 6 7e 05 5 e x 5 1e 03 6 f y 6 2e 05 7 g y 1 0e 02 8 h y 2 5e 0
  • 在其他vue组件文件中使用vue组件

    我尝试在其他组件 App vue 中使用vue组件 Global vue 但是有 组件挂载失败 模板或渲染函数未定义 error 全局vue
  • Android O 预览版 findViewById 编译错误

    我尝试测试Android O Developer Preview第二阶段 项目创建后 我只是点击构建并运行 但没有任何成功 Android默认生成的代码如下 Toolbar toolbar Toolbar findViewById R id
  • 与 libbluetooth.so 链接

    在 Ubuntu 14 04 上 我尝试做一个蓝牙设备列表的小示例 但在编译这个简约演示时 我遇到了一个关于与蓝牙共享库链接的简单问题http people csail mit edu albert bluez intro c404 htm
  • 具有边框半径和线性渐变的 CSS 过渡

    鉴于我的 CodePenhttps codepen io scottmgerstl pen MpMeBy https codepen io scottmgerstl pen MpMeBy这是我有问题的图像布局 span class prof
  • 根据事件日志触发powershell

    我有一个用 PowerShell 编写的命令行参数脚本 它接受来自任务计划程序的服务器名称 然而 我的要求是在 SQL 服务器重新启动时执行脚本 因此我已将 PowerShell 脚本附加到事件 17069 但我无法动态传递事件源 在本例中
  • 如何设置 hibernate-mapping 以允许长度超过 255 个字符的字符串?

    所以我试图通过创建一个博客引擎来学习 我正在使用 Hibernate 和 MySQL 这是我的 Post 类的休眠映射
  • JoptionPane 显示确认对话框

    我有一个Java程序 当我运行该程序时 它会给我一个 GUI 如我所附 当我想关闭它时 它会弹出一个确认对话框 如果我按 是 按钮 它将使用以下命令退出程序System exit public static void main String
  • 如何对列表进行排序,其中正值位于负值之前,并且值分别排序?

    我有一个包含正数和负数混合的列表 如下所示 lst 1 2 10 12 4 5 9 2 我想要完成的任务是对列表进行排序 其中正数位于负数之前 也分别排序 期望的输出 1 2 9 10 12 5 4 2 我能够计算出第一部分的排序 其中正数
  • 将具有相同键的节点添加到属性树中

    我正在使用 Boost 的属性树来读取和写入 XML 使用我制作的电子表格应用程序 我想将电子表格的内容保存到 xml 这是一项学校作业 因此我需要使用以下 XML 格式