【问题标题】:Save tree to a variable with HtmlAgilityPack使用 HtmlAgilityPack 将树保存到变量中
【发布时间】:2013-03-23 14:39:59
【问题描述】:

我是 C# 的新手。我正在 HtmlAgilityPack 中寻找类似的功能。在名为 BeautifulSoup 的 Python 解析库中存在名为 contents 的函数。我如何通过 HtmlAgility 做到这一点?

【问题讨论】:

    标签: c# html-agility-pack


    【解决方案1】:

    好的,那么首先获取包含所有内容的文档根目录

    //create a new document
    var _htmlDoc = new  HtmlAgilityPack.HtmlDocument();
    
    //fill it with html
    _htmlDoc.Load(filePath) or _htmlDoc.LoadHtml(string...)
    
    //get the document root node - it has all the contents
    var docuemntNode = _htmlDoc.DocumentNode;
    

    那么...使用 linq 或 xpath 查询节点

    string xpathExpressionSting = "//p";
    var contents = htmlDoc.DocumentNode.SelectNodes(xpathExpressionSting)
    //this would get paragraph tag nodes
    

    【讨论】:

    • 有谁知道如何递归遍历 HTML 文档对象模型,寻找文本节点?我尝试将页面上所有没有标签的文本保存在 .txt 文件中。但不是 500 行,而是重复的 6000 行。我做错了什么? TextWriter tw = new StreamWriter("html.txt"); foreach (soup.DocumentNode.Descendants() 中的 HtmlNode 文本) { string subText = text.InnerText;结果文本 += 子文本; tw.WriteLine(resultText); } tw.Close();
    • 看起来内部文本也可能包含封闭的节点。我不知道。请作为一个新问题提出
    • 不确定如何递归地执行此操作,尽管我认为您可以通过 - var nodes = doc.DocumentNode.SelectNodes("//text()") 选择它们 - 虽然我不是完全确定 xpath 语法
    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    相关资源
    最近更新 更多