首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HtmlAgilityPack SelectNodes,处理

HtmlAgilityPack SelectNodes,处理
EN

Stack Overflow用户
提问于 2013-02-23 23:31:39
回答 1查看 2.3K关注 0票数 2

我试图使用HtmlAgilityPack使用SelectNodes进行一些屏幕抓取,并从返回的每个节点获取一些值。

这是代码

代码语言:javascript
复制
private readonly HtmlDocument _document = new HtmlDocument();

public void ParseValues(string html)
{
    _document.LoadHtml(html);
    var tables = _document.DocumentNode.SelectNodes("//table");

    foreach (var table in tables)
    {
        _document.LoadHtml(table.OuterHtml);
        var value = _document.DocumentNode.SelectSingleNode("//tbody[1]/tr/td[0]");
    }
}

但是,我注意到,当试图选择具有foreach循环内部的子元素时,它实际上是从文档根中搜索的。很烦人的事。

问题:

  1. 是否有一种方法可以从SelectNodes返回的每个表中选择值,而不必从HtmlDocument中创建新的文档实例?
  2. 是否有一种处理HtmlDocument的方法,因为我注意到每次使用_document.LoadHtml(html)时都会出现内存泄漏;
EN

回答 1

Stack Overflow用户

发布于 2013-02-24 03:51:59

(有关更详细的解释,请参见https://stackoverflow.com/questions/6181014/html-agility-pack-problem-selecting-subnode/6182495#6182495)

不必创建另一个HtmlDocument对象,也不必将另一个HtmlDocument对象加载到其中。你只需要做:

代码语言:javascript
复制
foreach (var table in tables)
{
    var value = table.SelectSingleNode(".//tbody[1]/tr/td[0]");
}

关键是使用.//tbody而不是//tbody

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15046983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档