利用HtmlAgilityPack中的HtmlDocument对象的最佳方式是什么



我有一个代码片段,用于加载html文档并返回以进行进一步操作。

private HtmlDocument LoadPage(string path)
{
var web = new HtmlWeb();
var doc = web.Load(url + path);
return doc;
}

我创建了更小的方法来提取我想要的信息,方法如下:

public string getNameInfo(String path)
{
HtmlDocument doc = LoadPage(path);
string tag = doc.DocumentNode.SelectSingleNode("//*[@id='header_action']/div[1]/div[2]/h2").InnerText.Replace("n", String.Empty);
return tag;
}

我有另一个返回另一个标签的方法,我想通知

public string getCodeInfo(String path)
{
HtmlDocument doc = LoadPage(path);
string tag = doc.DocumentNode.SelectSingleNode("//*[@id='header_action']/div[1]/div[2]/h1").InnerText.Replace("n", String.Empty);
return tag;
}

今天,我可以提取我想要的信息,但我想重用已经咨询过的HtmlDocument,并享受从页面下载的乐趣。

我尝试了一些解决方案,但我做不到,有没有什么方法可以把一个HtmlDocument分解成更小的函数来填充我的变量,而不需要对加载方法进行多个查询。建议对LoadPage方法执行一个查询,并将其用于所有次要函数。

感谢收听

我不确定我是否理解正确。为什么不简单地重用HtmlDocument呢?

public string GetNameInfo(HtmlDocument doc)
{
string tag = doc.DocumentNode.SelectSingleNode("//*[@id='header_action']/div[1]/div[2]/h2").InnerText.Replace("n", String.Empty);
return tag;
}
public string GetCodeInfo(HtmlDocument doc)
{
string tag = doc.DocumentNode.SelectSingleNode("//*[@id='header_action']/div[1]/div[2]/h1").InnerText.Replace("n", String.Empty);
return tag;
}

您只需要加载一次,然后将其传递给方法。

另一种方法是:将HtmlDocument存储在类的属性或字段中,用LoadPage初始化它,然后在GetNameInfoGetCodeInfo中访问它,删除这些方法中的参数。

最新更新