通过 TinyXML 深度复制 XML

2023-12-28

我正在使用tinyxml。

如何复制或创建现有 XMLDocument 的副本?

http://www.grinninglizard.com/tinyxmldocs/classTiXmlDocument.html#a4e8c1498a76dcde7191c683e1220882 http://www.grinninglizard.com/tinyxmldocs/classTiXmlDocument.html#a4e8c1498a76dcde7191c683e1220882

我浏览了这个链接,上面写着使用Clone复制一个节点。但这是受保护的,我不想从中派生出一个类等。

我也不想将现有的 XMLDocument 保存到文件中,然后让另一个 XMLDocument 对象读取该文件以获取其副本。

我也无法使用执行深层复制memcpy因为我不知道整个 XML 的大小。

我也不希望一个接一个地使用两个对象,例如:

XMLDocumentObj1 = add_some_data

XMLDocumentObj2 = add_the_same_data, and so on

我想要第二个副本的主要原因是,第一个副本可能会被代码的不同部分修改,而同一副本在多个位置被“读取”。我需要确保读取 XMLDocument 时不会发生错误,因为这可能已被正在运行的线程在后台修改,并且我不会遇到程序崩溃。


这是我写的用于进行深层复制的内容。它获取源节点并将其复制到目标节点、子节点和所有节点下。内存取自目标节点的上下文。希望这对您来说是一个朝着正确方向的开始。

void CopyNode(tinyxml2::XMLNode *p_dest_parent, const tinyxml2::XMLNode *p_src)
{
    // Protect from evil
    if (p_dest_parent == NULL || p_src == NULL)
    {
        return;
    }

    // Get the document context where new memory will be allocated from
    tinyxml2::XMLDocument *p_doc = p_dest_parent->GetDocument();

    // Make the copy
    tinyxml2::XMLNode *p_copy = p_src->ShallowClone(p_doc);
    if (p_copy == NULL)
    {
        // Error handling required (e.g. throw)
        return;
    }

    // Add this child
    p_dest_parent->InsertEndChild(p_copy);

    // Add the grandkids
    for (const tinyxml2::XMLNode *p_node = p_src->FirstChild(); p_node != NULL; p_node = p_node->NextSibling())
    {
        CopyNode(p_copy, p_node);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 TinyXML 深度复制 XML 的相关文章

随机推荐

  • 使用python正则表达式来匹配时间

    我正在尝试解析一个 csv 文件 其时间格式为下午 6 30 或上午 7 点或午夜 我已经用谷歌搜索并阅读了 python 文档中的正则表达式文档 但未能成功实现它们 我第一次尝试匹配它们是 re findall r d 1 2 d 1 2
  • 带过滤器的 Web Api $extend IQueryable

    我有一个设置 我获得了一个 WebApi OData 服务 该服务返回 客户 返回客户的代码是 public IHttpActionResult GetCustomers ODataQueryOptions
  • Java 8 流中聚合运行时异常

    假设我有一个抛出运行时异常的方法 我正在使用一个Stream对列表中的项目调用此方法 class ABC public void doStuff MyObject myObj if throw new IllegalStateExcepti
  • 如何在kivy+python中从数据库获取数据并显示在表格中

    list py import kivy kivy require 1 9 0 replace with your current kivy version import sqlite3 as lite from kivy uix scree
  • PHP foreach 更改原始数组值[重复]

    这个问题在这里已经有答案了 我对多维数组非常陌生 这让我很烦恼 我的数组如下 fields array names gt array type gt text class gt name name gt name text before g
  • JavaScript 倒计时和重定向

    我有一个 javascript 脚本 它运行倒计时 然后重定向到另一个链接 由于我现在所有网站都使用静态域运行相同的代码 因此我想知道是否可以编辑脚本以使其根据其周围的 span 标签重定向到不同的链接 我还删除了这段代码 所以如果有人有更
  • 在外部存储器/SD卡上缓存图像的推荐路径

    当我在 Android 文件传输或 Astro 文件管理器中查看 SD 卡根目录时 发现很混乱 因为应用程序到处都存储着文件 作为开发人员 我们通过缓存图像 文件等来遵循最佳实践 以使我们的应用程序更快 并且我们使用Environment
  • 如何仅向测试人员发布新版本的 Chrome 扩展程序

    我有一个有很多用户的 Chrome 扩展程序 我想更新它 我已准备好一切 但我需要测试更新以确保当前用户不会丢失数据 有没有办法只将新版本发布给受信任的测试人员 我创建了一个测试组 我插入受信任的测试人员电子邮件帐户 我已在测试帐户下登录
  • 架构和数据字典有什么区别?

    模式的定义是数据库中数据的逻辑结构 它由用户拥有并与数据库用户同名 模式包含表的名称 它的列类型是什么等 数据字典也仅包含元数据 当然它是在数据库级别而不是用户级别 模式和数据字典之间的确切区别是什么 这些定义来自我的经验 20 多年的程序
  • VBS代码中的With语句,在PowerShell中如何表达

    有没有可以快速将VBS代码转换为PowerShell代码的软件或工具 另外 我想知道的是 以下WithVBS代码中的语句 在PowerShell中如何表达 The With语句很棒 可以缩短代码 我可以在PowerShell中实现类似的功能
  • 错误:未授予权限...react-native-image-picker

    我正在尝试使用客户端应用程序中的内存上传图像 反应本机图像选择器 0 26 4 执行以下示例片段后 我以意想不到的方式得到了响应 ImagePicker showImagePicker options response gt console
  • WPF 应用程序基于角色的访问控制 - 最佳实践

    我需要实施某种RBAC http en wikipedia org wiki Rbac对于我目前正在编写的 WPF 应用程序 自 v2 0 起 ASP NET 就拥有了安全性 成员身份和角色管理基础架构 如所述here http weblo
  • jaxws-api 2.2 未在 Maven 构建中加载

    我已经使用 Apache CXF 工具 wsdl2java 生成了 Java 代码 在我的服务评论中 它说我应该支持 Jaxws API 2 2 但不知道这意味着什么 在我的 Maven POM 中我有这个
  • 如何以编程方式圆角并设置随机背景颜色

    我想圆化视图的角 并根据运行时的内容更改视图的颜色 TextView v new TextView context v setText tagsList get i if i 2 0 v setBackgroundColor Color R
  • 以编程方式在 Swift 中模拟滑动手势

    我正在实现一个用于在 Swift 中滑动的手势识别器 我希望能够模拟卡片的投掷 以编程方式滑动视图 我以为会有一个内置函数来实现这一点 但我发现的只是点击手势而不是滑动手势 这就是我实现滑动手势的方式 let gesture UIPanGe
  • 如何在 VS Code 中自定义多个主题的 textMateRules? [复制]

    这个问题在这里已经有答案了 In VS Code 我想定制一些textMateRules多个主题相同 例如 两者都用于Atom One Dark and Default Dark 但在不影响任何其他主题的情况下 我想让keywords it
  • 使用 CreateProcess 运行批处理文件

    我正在尝试使用 CreateProcess 启动一个新的环境块并在新的环境块中运行批处理文件 我已经阅读了 CreateProcess 的 msdn 示例 并得出了如下所示的代码 发生了什么 它将打开新的命令提示符 并停在那里 由于某种原因
  • Angular 材质 md-button 悬停颜色变化

    div class non active div
  • sublimerepl getenv 失败

    我想将 SiblimeREPL 包与 Sublime Text 一起使用 当我尝试启动 REPL 时 我得到 SublimeREPL obtaining sane environment failed in getenv Check con
  • 通过 TinyXML 深度复制 XML

    我正在使用tinyxml 如何复制或创建现有 XMLDocument 的副本 http www grinninglizard com tinyxmldocs classTiXmlDocument html a4e8c1498a76dcde7