C++ Webkit GTK:使用DOM树遍历器

C++ Webkit GTK:使用DOM树遍历器,c++,c,webkit,gtk,webkitgtk,C++,C,Webkit,Gtk,Webkitgtk,所以,我正在试验Webkit GTK DOM函数。它非常简单,除了一件事:API中有一个有用的部分叫做WebKitDOMTreeWalker,我假设它可以让您遍历DOM中的每个节点,就像Javascript中的TreeWalker对象一样 现在,在Javascript中,通过调用以下命令创建TreeWalker: document.createTreeWalker(root、nodesToShow、filter、entityExpandBol) 因此,在WebKit GTK中,API中有一个明

所以,我正在试验Webkit GTK DOM函数。它非常简单,除了一件事:API中有一个有用的部分叫做
WebKitDOMTreeWalker
,我假设它可以让您遍历DOM中的每个节点,就像Javascript中的
TreeWalker
对象一样

现在,在Javascript中,通过调用以下命令创建TreeWalker:

document.createTreeWalker(root、nodesToShow、filter、entityExpandBol)


因此,在WebKit GTK中,API中有一个明显的对应项—一个名为
WebKit\u dom\u document\u create\u tree\u walker
的函数。函数签名为:

WebKitDOMTreeWalker* webkit_dom_document_create_tree_walker(WebKitDOMDocument* self, WebKitDOMNode* root, gulong what_to_show, WebKitDOMNodeFilter* filter, gboolean expand_entity_references, GError **error);
因此,使用WebKit GTK创建一个树行者似乎非常简单——除了一个大问题:
WebKit\u dom\u文档中的第四个参数\u create\u tree\u walker
需要一个过滤器对象,也就是说,它需要一个
WebKitDOMNodeFilter
的实例。当然,Javascript函数也接受一个过滤器,但是如果不想使用过滤器,可以传递
null
。对于WebKitAPI,传递
NULL
不起作用。如果你打电话:

WebKitDOMTreeWalker* walker = webkit_dom_document_create_tree_walker(doc, root, SHOW_ALL, NULL, false, err)
您将收到错误消息:

**(webkit:3367):关键:WebKitDOMTreeWalker*webkit\u dom\u document\u create\u tree\u walker(WebKitDOMDocument*, WebKitDOMNode*、古龙、WebKitDOMNodeFilter*、gboolean、GError): 断言“筛选器”失败

因此,WebKit API不会接受筛选器参数的空指针。显然,您需要传递一个
WebKitDOMNodeFilter
的实例。好的,再说一遍——这也不会是个问题,除非我已经通过WebKit API和Google进行了广泛的搜索,但我找不到创建WebKitDOMNodeFilter对象的方法!的头文件未公开WebKitDOMNodeFilter的任何构造函数。看起来API根本就没有公开来实际构造WebKitDOMNodeFilter对象


然而。。。API公开了许多需要WebKitDOMNodeFilter的函数(如webkit\u dom\u document\u create\u tree\u walker和webkit\u dom\u document\u create\u node\u迭代器)。所以API现在还不完整吗?或者,是否有某种方法可以创建我没有看到的筛选器对象?

可以通过调用
WEBKIT\u DOM\u NODE\u FILTER(null)

否,它仍然会因断言失败而失败。在内部,WebKit GTK正在检查指针是否为空。