因此,我正在尝试使用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)

09-07 07:31