当前位置:  开发笔记 > 编程语言 > 正文

HTML Agility包 - 解析表

如何解决《HTMLAgility包-解析表》经验,为你挑选了2个好方法。

我想使用HTML敏捷包来解析复杂网页中的表,但我在对象模型中丢失了.

我查看了链接示例,但没有找到任何表数据.我可以使用XPath来获取表吗?在加载了关于如何获取表格的数据后,我基本上已经丢失了.我之前在Perl中做过这个,它有点笨拙,但很有效.(HTML::TableParser).

如果能够解释正确的解析对象顺序,我也很高兴.



1> Marc Gravell..:

如下所示:使用HTML Agility Pack

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"

hello
world
"); foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table")) { Console.WriteLine("Found: " + table.Id); foreach (HtmlNode row in table.SelectNodes("tr")) { Console.WriteLine("row"); foreach (HtmlNode cell in row.SelectNodes("th|td")) { Console.WriteLine("cell: " + cell.InnerText); } } }

请注意,如果您需要,可以使用LINQ-to-Objects使其更漂亮:

var query = from table in doc.DocumentNode.SelectNodes("//table").Cast()
            from row in table.SelectNodes("tr").Cast()
            from cell in row.SelectNodes("th|td").Cast()
            select new {Table = table.Id, CellText = cell.InnerText};

foreach(var cell in query) {
    Console.WriteLine("{0}: {1}", cell.Table, cell.CellText);
}



2> Coda..:

我发现获得特定Element的XPath最简单的就是为Firefox安装FireBug扩展程序进入网站/网页按F12以显示firebug; 右键选择并右键单击要查询的页面上的元素,然后选择"Inspect Element"Firebug将在其IDE中选择元素,然后右键单击Firebug中的Element并选择"Copy XPath",此函数将为您提供精确的XPath查询您需要使用HTML Agility Library获取所需的元素.


请记住,有时浏览器会略微更改html的DOM - 比如将添加到(如果它缺失).默认情况下,Html Agility Pack在解析html时也不会包含和