だから、私は Webkit GTK DOM 関数を試しています。これは非常に簡単ですが、1 つのことを除けば、JavascriptWebKitDOMTreeWalker
のオブジェクトのように、DOM の各ノードをウォークスルーできるAPI の便利な部分があるということです。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 を作成するのは非常に簡単に思えますが、1 つの大きな問題を除いては、 の 4 番目の引数はフィルターwebkit_dom_document_create_tree_walker
オブジェクトを想定しています。つまり、 のインスタンスが必要です。さて、Javascript 関数もフィルターを使用しますが、フィルターを使用したくない場合は渡すことができます。Webkit API では、引き渡しは機能しません。あなたが呼び出す場合:WebKitDOMNodeFilter
null
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 ): アサーション `filter' が失敗しました
そのため、WebKit API はフィルター引数の NULL ポインターを受け入れません。明らかに、のインスタンスを渡す必要がありますWebKitDOMNodeFilter
。わかりました。これも問題にはなりません。ただし、Google だけでなく WebKit API を広範囲に検索しましたが、とにかく WebKitDOMNodeFilterオブジェクトを作成する方法が見つかりません! WebKitDOMNodeFilter.hのヘッダー ファイルは、WebKitDOMNodeFilterのコンストラクターを公開しません。とにかく、API が WebKitDOMNodeFilter オブジェクトを実際に構築するために公開することはないようです。
それでも... API は、WebKitDOMNodeFilter を必要とする多くの関数 (webkit_dom_document_create_tree_walker や webkit_dom_document_create_node_iterator など) を公開します。それで... APIは今不完全ですか?または、表示されていない Filter オブジェクトを作成する方法はありますか?