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,以便我可以进行“子搜索”?
答案 0 :(得分:2)
来自http://answers.awesomium.com/questions/4276/parsing-with-awesomium.html的交叉发布的答案
为什么需要Awesomium进行HTML解析?怎么了? HtmlAgilityPack?
使用Awesomium下载页面(如果这就是您需要它的原因),获取HTML, 用HtmlAgilityPack解析它。
这样解析应该非常慢(如果它返回许多元素)。