如何解决 RapidXML 字符串所有权问题?

2023-11-23

RapidXML是一个快速、轻量级的 C++ XML DOM 解析器,但它有一些怪癖。

在我看来,其中最糟糕的是:

3.2 字符串的所有权。

RapidXml 生成的节点和属性不 拥有它们的名称和值字符串。他们 只需持有指向它们的指针即可。这 意味着你必须小心 手动设置这些值,通过 使用xml_base::name(const Ch *) or xml_base::value(const Ch *)功能。

必须注意确保 传递的字符串的生命周期是 至少与寿命一样长 节点/属性。最简单的方法 实现它是分配字符串 来自拥有的内存池 文档。使用memory_pool::allocate_string()用于此目的的功能。

现在,我明白这样做是为了速度,但这感觉就像一场车祸即将发生。以下代码看起来无害,但当 foo 返回时,“名称”和“值”超出范围,因此该文档未定义。

void foo()
{
  char name[]="Name";
  char value[]="Value";

  doc.append_node(doc.allocate_node(node_element, name, value));
}

使用建议allocate_string()按照手动操作,但很容易忘记。

有没有人“增强”RapidXML 来避免这个问题?


我不使用RapidXML,但也许我的方法可以解决您的问题。

我开始使用 Xerces,但除了其他一些小烦恼之外,我发现它很重,所以我转向了 CPPDOM。当我采取行动时,我决定创建一组包装类,这样我的代码就不会依赖于特定的 XML“引擎”,并且如果需要,我可以移植到另一个引擎。

我创建了自己的类来表示基本 DOM 实体(节点、文档等)。这些类在内部使用 pimpl 习惯用法来使用 CPPDOM 对象。 由于我的节点对象包含“真实”节点对象(来自 CPPDOM),我可以根据需要管理任何内容,因此字符串的正确分配和取消分配不会成为问题。

由于我的代码是针对 CPPDOM 的,所以我认为它对您来说没有多大用处,但如果您愿意,我可以将其发布。

顺便说一句,如果您已经有太多使用 RapidXML 的代码,您可以在包装类中重现其接口。我没有这样做,因为使用 Xerces 的代码没有那么长,无论如何我都必须重写它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决 RapidXML 字符串所有权问题? 的相关文章

  • 数据模板绑定垃圾邮件输出窗口出现错误:找不到管理 FrameworkElemen

    我有问题 System Windows Data 错误 2 找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement BindingExpression 无路径 数据项 空 目标元素是 So
  • 尚未注册类型“IServiceProviderFactory[Autofac.ContainerBuilder]”的服务

    当运行以下命令添加数据库迁移脚本时 出现以下错误 dotnet ef migrations add InitialCreate v o Migrations context MyContext 访问 Microsoft Extensions
  • 在实体框架拦截器中向 DbScanExpression 添加内部联接

    我正在尝试使用实体框架 CommandTree 拦截器通过 DbContext 向每个查询添加过滤器 为了简单起见 我有两个表 一个称为 User 有两列 UserId 和 EmailAddress 另一个称为 TenantUser 有两列
  • 在 C# 中按元素相乘数组具有意想不到的性能

    我想找到按元素相乘两个数组的最佳方法 这是更广泛项目的一部分 其中性能而不是唯一的考虑因素 我今天开始用 C Linqpad 编写一些函数 因此它还没有以任何方式进行优化 下面代码的输出如下 Environment ProcessorCou
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 根据 N 个值中最小的一个返回不同的结果

    不确定如何使标题更具描述性 所以我只是从一个例子开始 我使用下面的代码位 它从枚举中选择一个方向 具体取决于四个轴中哪一个与给定方向相比形成最小角度 static Direction VectorToDirection Vector2 di
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • C# 构建一个 webservice 方法,它接受 POST 方法,如 HttpWebRequest 方法

    我需要一个接受 POST 方法的 Web 服务 访问我的服务器正在使用 POST 方法 它向我发送了一个 xml 我应该用一些 xml 进行响应 另一方面 当我访问他时 我已经使用 HttpWebRequest 类进行了管理 并且工作正常
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map

随机推荐

  • 如何将 hashMap 与 JTable 一起使用

    我有一个 hashMap 我希望在 JTable 中查看它的数据 但我在获取 hashMap 的列和行数量以及要显示的数据时遇到了麻烦 我有一个 hashmap 它以 accountID 作为键和一个学生的对象 其中每个学生都有自己的数据
  • SwiftUI 在圆角矩形内屏蔽一个矩形

    你好呀 我想知道 在 SwiftUI 中 如何屏蔽圆角矩形的内容 以便子矩形剪掉角 在我的示例中 我在 zstack 上有一个白色圆角矩形和一个粉色矩形 我尝试应用剪切 但粉色矩形不符合边角 我尝试将 mask 应用于白色矩形 但它给出了与
  • 无法在 pthread_create 函数中将 '*void(MyClass::*)(void*) 转换为 void*(*)(void*)

    我正在尝试使用 CameraManager 类创建一个新线程 但出现以下错误 无法在 pthread create 函数中将 void CameraManager void 转换为 void void 我在cameramanager h文件
  • 如何将继承的对象字符串化为 JSON?

    使用 JSON stringify 时 json2 js 似乎忽略了父对象的成员 例子 require json2 js function WorldObject type this position 4 function Actor va
  • 可以使用单例 DAO 对象吗?

    考虑以下类的结构 BaseDAO使用方法来创建PreparedStatement并从池中获取连接 AccountDAO extends BaseDAO跟 共事Account通过 JDBC 的表 这个类是单例类 AccountService女
  • 我如何知道 jQuery 是否有待处理的 Ajax 请求?

    我在使用我们制作的 jQuery 控件时遇到一些问题 假设您有一个下拉列表 允许您输入要查找的项目的 ID 当您按 ENTER 或在文本框中失去焦点时 它会通过 jQuery 验证您输入的 ID 是否正确 如果不正确则显示警报 t 问题是
  • 无法通过 PDO_ODBC 从 Access 检索 UTF-8 重音字符

    我正在尝试将 Access DB 转换为 MySQL 一切都很完美 除了一把大活动扳手之外 如果访问数据库有任何非标准字符 它将无法工作 我的查询会告诉我 Incorrect string value xE9d 如果我直接回显具有 无效 字
  • 创建名称助手,将名字和姓氏分开

    我正在寻找一些有关如何获取属性并通过方法处理它以返回不同内容的帮助 但我以前从未这样做过 而且不知道从哪里开始 我想尝试将 name string 属性从 George Washington 或 John Quincy Adams 更改为仅
  • ASP.NET 5 EntityFramework.Core 7.0.0-rc1-final 问题 - 编译器希望引用 7.0.0.0,但未找到

    我有同样的问题 我在我的中添加了以下依赖项project json file dependencies EntityFramework 7 0 0 beta4 EntityFramework Core 7 0 0 rc1 final Ent
  • Android 获取缓存大小的方法

    我在我的测试应用程序中使用 fedor 的延迟加载列表实现 只需单击一个按钮即可清除缓存 如何获取列表视图中加载图像的缓存大小并以编程方式清除缓存 以下是保存缓存图像的代码 public ImageLoader Context contex
  • 理解记忆障碍

    我正在尝试在对 java 无锁程序员有用的级别上理解内存屏障 我认为 这个级别介于学习易失性和从 x86 手册中学习存储 加载缓冲区的工作之间 我花了一些时间阅读了很多博客 食谱 并得出了下面的摘要 有知识渊博的人可以看一下摘要 看看我是否
  • 如何将相对布局设置为默认布局

    我通常在大部分活动中使用相对布局 我想让 Android studio 在创建新活动时默认创建相对布局 而不是约束布局 有没有办法做到这一点 右键单击布局文件夹 gt 新建 gt 编辑文件模板 打开一个对话框 转到 其他 选项卡 更改内容
  • C++11 从频繁变化的范围生成随机数

    问 如何从先验未知范围生成 许多 均匀分布的整数 就性能而言 生成数百万个数字 首选方式是什么 上下文 在我的应用程序中 我必须在许多地方生成许多伪随机数 我对生成器使用单例模式来保持应用程序运行的可重复性 在我的例子中 分布总是均匀的 但
  • 使用 jquery 动态创建元素

    我正在尝试使用 jquery 创建元素 当我单击链接时 我想创建一个元素 p 给它一些文本 然后将其放入我的一个 div 中 另外 我想检查点击了哪个链接 这样我就可以将创建的 p 放在右侧的 div 中 关于我做错的地方有什么解决方案吗
  • 为什么新样式类和旧样式类在这种情况下有不同的行为?

    我发现了一些有趣的东西 这是一段代码 class A object def init self print A init def del self print A del class B object a A 如果我运行这段代码 我将得到
  • Android 图像滤镜库

    是否有适用于 Android 的图像库 如http www jhlabs com ip filters index html 或者有人移植过同样的东西吗 提前致谢 我知道这是一个老话题 但在没有 AWT 库的情况下 我已经开始移植一些图像滤
  • d3-cloud 的打字

    我想用d3 cloud在我的 Angular2 应用程序中生成词云 但是 我无法找到要安装的正确类型 我试过this但是当我尝试将其导入到我的组件中时 它不起作用 我不断收到错误 在类型中找不到属性布局 有人可以帮我解决这个问题吗 我想出了
  • 简单标题未显示在 UINavigationController 中

    我已经查看了所有类似 相关的问题 但没有一个是a 完全是我的问题 或者2 解决方案不起作用 在我的 appDelegate m 中 我有 didFinishLaunchingWithOptions JCGRootNavigationCont
  • 以编程方式更改 SQL Server 设置

    我请求你仔细阅读我的问题 您可能知道 当您安装带有 SQL Server Express 版本的 VS2005 2008 时 SQL Server 默认以 Windows 身份验证模式运行 您可以使用 SQL Server Manageme
  • 如何解决 RapidXML 字符串所有权问题?

    RapidXML是一个快速 轻量级的 C XML DOM 解析器 但它有一些怪癖 在我看来 其中最糟糕的是 3 2 字符串的所有权 RapidXml 生成的节点和属性不 拥有它们的名称和值字符串 他们 只需持有指向它们的指针即可 这 意味着