我工作的应用程序使用 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/