c++ - 从 XML 中提取特定数字属性的有效方法

标签 c++ xml regex performance

我工作的应用程序使用 XML 进行保存/恢复。这是一个示例片段:

<?xml version="1.0" standalone="yes"?>
<itemSet>
<item handle="2" attribute1="30" attribute2="blah"></item>
<item handle="5" attribute1="27" attribute2="blahblah"></item>
</itemSet>

我希望能够有效地预处理我从配置文件中读入的 XML。特别是,我想从上面的示例配置中提取 handle 值。

理想情况下,我需要一个函数/方法能够传入不透明的 XML 字符串,并返回列表中的所有句柄值。对于上面的示例,将返回一个包含 2 和 5 的列表。

我知道有一个正则表达式可以提供帮助,但这是最有效的方法吗?字符串操作的成本可能很高,并且我可能需要在配置文件中处理 1000 多个 XML 字符串。

最佳答案

您正在寻找一种面向流的 XML 解析器,它一次读取 XML 中的每个节点,而不是将整个内容加载到内存中。

最著名的一个是 SAX - Simple API for XML

这是一个 good article描述为什么要使用 SAX 以及在 C++ 中使用 SAX 的具体情况。

您可以将 SAX 视为 XML 的解析器,它只将最低限度的内容加载到内存中,因此可以很好地处理非常大的 XML 文档。与要求您将整个文档加载到内存中的 Regex 或 DOM 方法相比。

关于c++ - 从 XML 中提取特定数字属性的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552253/

相关文章:

java - 如何访问字符串数组?(Android)

php - RegExp 查找中间带有随机字符的特定字符串

regex - 使用正则表达式在 html 文件中搜索随机字符串

javascript - 将所有单词大写

c++ - C++ 头文件的正确布局

xml - 编辑 .plist 文件 - 是否允许单引号作为字符串?

c++ - 在非常量函数中使用 const_iterator

java - 检索 Jaxb 转换的 Enum 类中的 @XmlEnumValue 注释属性值

c++ - 为什么lambda init-capture对于unique_ptr不起作用?

c++ - boost program_options 生成一个 Klocwork MLK.MUST