【问题标题】:the best way to leverage an HtmlDocument object from the HtmlAgilityPack?利用 HtmlAgilityPack 中的 HtmlDocument 对象的最佳方法?
【发布时间】:2021-06-02 17:50:02
【问题描述】:

我有一个代码 sn-p 加载一个 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 方法执行单个查询并将其用于所有次要功能。

感谢收听

【问题讨论】:

    标签: c# asp.net html-agility-pack


    【解决方案1】:

    我不确定我是否理解正确。你为什么不简单地重复使用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中访问它,删除这些方法中的参数。

    【讨论】:

    • 非常感谢您的帮助,我的朋友。我很抱歉,因为我的英语很糟糕,但你正确理解了我的意思,我衷心感谢
    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 2018-01-05
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2012-04-19
    相关资源
    最近更新 更多