最有效的数据结构,用于在C++中存储XML树

Zac*_*ner 5 c++ xml qt

我正在用C++中的XML做一些工作,我想知道存储XML数据的最佳数据结构是什么.请不要只告诉我你过去所听到的内容; 我想知道最有效的结构是什么.我希望能够存储任意XML树(假设它是有效的),具有最小的内存开销和查找时间.

我最初的想法是哈希,但我无法弄清楚如何处理同一标签的多个孩子,以及如何处理属性.

Qt解决方案是可以接受的,但我更关心的是整体结构而不是特定的库.感谢您的输入.

Ira*_*ter 5

最有效的结构是从DTD或Schema派生的一组类,它们定义了您要处理的特定XML实例.(当然你不会处理任意XML?)标签由类表示.单个孩子可以用字段表示.带有min ... max arity的Childen可以由包含数组的字段表示.具有不确定arity的子代可以由动态分配的数组表示.属性和子项可以存储为字段,通常使用推断的数据类型(如果属性表示数字,为什么将其存储为字符串?).使用此方法,您通常可以使用本机C++访问路径导航到XML文档中的特定位置,例如root-> tag1.itemlist [1] - > description.

所有这些都可以从Schema或DTD自动生成.有工具可以做到这一点. Altova提供一些.我对此没有具体经验(尽管我已经为Java和COBOL构建了类似的工具).