用Awesomium解析

时间:2014-03-01 11:54:57

标签: parsing xpath awesomium

awesomium回答论坛似乎已经死了,所以我在这里重新发布

首先,在开始学习Awesomium之前,我使用了HtmlAgilityPack库来满足我的所有解析需求,但是库不再被更新了,我决定转到Awesomium。 (所以我的方法是基于我对HAP的经验)

我想出了如何使用Awesomium解析对象列表,但我无法弄清楚如何使用它们。例如:

     public dynamic FindNodes(string xpath, dynamic node = null, WebView wv = null)
            {
                if (wv == null) wv = mainView;
                dynamic nodes = (JSObject)wv.ExecuteJavascriptWithResult(String.Format("document.evaluate(\"{0}\", {1}, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null)", xpath, "document")));
                int length = nodes.snapshotLength;
                for (int i = 0; i < length; i++)
                {
                    Console.WriteLine(nodes.snapshotItem(i).innerText);
                }
                return nodes;
            }

返回节点后问题开始了。我想对每个节点执行一系列搜索,因此在返回它们之后我决定以下内容应该有效:

dynamic weakCounters = ap.FindNodes("//div[@id='weaklist']/ul/li");
            for (int i = 0; i < weakCounters.snapshotLength; i++)
            {
                ap.FindNodes("//h3[@class='black']", weakCounters.snapshotItem(i));
            }

但事实并非如此。我试图获取列表长度的部分,当然,如果我尝试直接获取项目的快照,我会收到错误。

我明白,我在某个地方犯了一个巨大的错误。我只是无法理解在哪里。

编辑:令人惊讶的是,如果我执行以下操作,一切似乎都很好,但是每次我需要访问它时,它只是不正确地创建一个新变量(这只是香蕉)

dynamic weakCounters = ap.FindNodes("//div[@id='weaklist']/ul/li");
            dynamic nodes = weakCounters;
            for (int i = 0; i < nodes.snapshotLength; i++)
            {

另外,如何将我提取的结果(元素)传递给awesomium,以便我可以进行“子搜索”?

1 个答案:

答案 0 :(得分:2)

来自http://answers.awesomium.com/questions/4276/parsing-with-awesomium.html的交叉发布的答案

  

为什么需要Awesomium进行HTML解析?怎么了?   HtmlAgilityPack?

     

使用Awesomium下载页面(如果这就是您需要它的原因),获取HTML,   用HtmlAgilityPack解析它。

     

这样解析应该非常慢(如果它返回许多元素)。