c++ - XML 编辑/替换的好选择

标签 c++ xml

我有一个巨大(超过 10 万行,5MB 以上)的 XML,它充当我的 C++ 应用程序的数据库。 XML 的结构非常简单,例如,它包含以下 block :

<foo>
<bar prop="true"/>
<baz>blah</baz>
</foo>

标签的嵌套有几层深,并且有很多项目具有多个属性。查找和替换此类文件 block 的好方法是什么?例如,假设上面的部分重复了几十次,并且在每个 block 中标签的值 <baz>是不同的。我想进行如下编辑:

  • 设置标签 <baz> 中包含的所有值给定值。
  • 删除包含特定值的 block

到目前为止,我已经了解了以下实现此目的的方法:

  • 查找/替换:一个简单易行的解决方案,也是我最后的后备方案。恕我直言,这种方法是最耗时、最容易出错且最痛苦的方法。绝对的最后手段。

  • RegExes:使用正则表达式匹配感兴趣的 block 并使用替换表达式对其进行编辑。有点像这个博客条目:http://blogs.msdn.com/b/vseditor/archive/2004/08/12/213770.aspx .但我觉得这很容易出错,如果正则表达式第一次不完全正确,可能会遗漏很多项目。

  • 解析并保存:快速编写一个程序,使用 Xerces 或 XML DOM 接口(interface)(或其他一些 XML 库)解析 XML,读入 XML,根据需要对其进行操作,然后存回磁盘。同样,这种方法是一个缓慢的过程,但一旦启动并运行,就很容易进行修改,并且比 RegEx 更灵活。

有没有更好的方法来处理这个问题? (编辑:感谢所有重做它以使用数据库建议,我知道它是一个巨大的困惑但是“更好的方法来处理这个”我的意思是“查找/替换”部分。)

最佳答案

如果您不想将整个文档放在内存中,我会使用 SAX 解析器读取它。在您阅读它时,您将转换后的文档附加到第二个(或临时)文件。我认为它可能会非常快,并且只占用很少的内存。

关于c++ - XML 编辑/替换的好选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6112679/

相关文章:

c++ - 这是使用抽象类数组 (C++) 的正确方法吗?

type_info 的 C++ 特定类型

c++ - mongocxx::instance inst{} 内存泄漏;

c# - 我如何消除具有某些祖先的元素?

asp.net - 在 aspx 文件中转义撇号

python - 通过 'ElementTree' 在 Python 中使用命名空间解析 XML

xml - XPath 使用 MSXML2 失败

c++ - Qt 中的 2D 游戏 : Initializing monsters and passing dynamically allocated array as a pointer parameter

c++ - 在 DOS 中添加按钮

java - 将 XSLT 与 JAXB 结合使用