因此,我正在尝试使用Webkit GTK DOM函数。它非常简单,除了一件事:API中有一个有用的部分,称为WebKitDOMTreeWalker
,我认为,它可以让您遍历DOM中的每个节点,就像Javascript中的TreeWalker
对象一样。
现在,在Javascript中,通过调用以下代码创建TreeWalker:document.createTreeWalker(root, nodesToShow, filter, entityExpandBol)
因此,在WebKit GTK中,API中有一个明显的对应对象-称为webkit_dom_document_create_tree_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创建TreeWalker似乎非常简单-除了一个大问题:
webkit_dom_document_create_tree_walker
中的第四个参数需要一个过滤器对象,也就是说,它需要WebKitDOMNodeFilter
的实例。好吧,Javascript函数也有一个过滤器,但是如果您不想使用过滤器,则可以通过null
。使用Webkit API,传递NULL
不起作用。如果您致电:WebKitDOMTreeWalker* walker = webkit_dom_document_create_tree_walker(doc, root, SHOW_ALL, NULL, false, err)
您收到错误信息:
**(webkit:3367):严重:WebKitDOMTreeWalker * webkit_dom_document_create_tree_walker(WebKitDOMDocument *,
WebKitDOMNode *,gulong,WebKitDOMNodeFilter *,gboolean,GError):
断言“过滤器”失败
因此,WebKit API将不接受NULL指针作为filter参数。显然,您需要传递
WebKitDOMNodeFilter
的实例。好的,再说一次-这也不是问题,除了我已经遍及WebKit API和Google进行了广泛搜索,而且无论如何我都找不到创建WebKitDOMNodeFilter对象的方法! WebKitDOMNodeFilter.h的头文件未公开WebKitDOMNodeFilter的任何构造函数。似乎该API根本不会公开来构造一个WebKitDOMNodeFilter对象。但是...该API公开了许多需要WebKitDOMNodeFilter的功能(例如webkit_dom_document_create_tree_walker和webkit_dom_document_create_node_iterator)。那么... API现在还不完整吗?或者,有什么方法可以创建我没有看到的Filter对象?
最佳答案
您能否通过调用将null转换为WebKitDOMNodeFilter
类型?WEBKIT_DOM_NODE_FILTER(null)
?