如何将私有数据附加到 libxml2 或 gdome dom 树

how to attach private data to libxml2 or gdome dom tree

本文关键字:libxml2 gdome dom 数据      更新时间:2023-10-16

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

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

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

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

相反,我会使用一个单独的元数据存储,就像std::map<xmlNode*, void*>一样。 (我会使用比void*更安全的东西,但希望你明白这个想法)

我看到的最大问题(在这两种情况下)是您需要注意您关联的元数据的生存期。我看不出有什么办法收到节点被破坏的通知......这可能会导致各种麻烦。

文档说 对于用户数据,libxml 不会涉及_private,但我的记忆是它适用于 libxml2 语言绑定之类的东西(例如 xmlwrapp 为此目的使用它),而不是用于用户代码。