2011-05-19 43 views
1

我想使用libxml2或gdome API将一些私有数据(void *)挂在DOM树中的节点之外。通过(相当稀疏)的api文档来看,似乎libxml2节点可能有一个用户数据成员(_private,几乎在每个对象上),但我没有看到任何api调用来操纵它。如何将私有数据附加到libxml2或gdome dom树

+0

我认为添加用户数据包含在DOM级别3中,gdome是级别2.也许您可以使用DOM级别3库(如xerces)?然后userdata是可能的,并且该库可以处理数据的生命周期。 – rve 2011-05-20 06:02:14

回答

1

由于xmlNode是一个结构,您可以直接访问void* _private成员。

xmlNode * ePtr = ...; 
ePtr->_private = ...; 

但我找不到任何文档说该字段是用于自定义用户数据。所以我会避免这种做法。

相反,我会使用一个单独的元数据存储,像std::map<xmlNode*, void*>会做。 (我会使用一些比void*更安全的类型,但希望你能明白)

我看到的最大问题(在这两种情况下)都是你需要小心元数据的生命周期关联。我看不出有什么办法可以通知一个节点的销毁......这可能会导致各种麻烦。

0

文档说对于用户数据的libxml不会去碰它_private,但我的记忆是,它意味着对于像libxml2的语言绑定(如xmlwrapp将它用于这个目的),而不是为用户代码。