HtmlAgilityPack-如何读取某些表格-c#4.0

HtmlAgilityPack-如何读取某些表格-c#4.0,c#,html-agility-pack,C#,Html Agility Pack,使用c#4.0和htmlagilitypack,我如何读取特定表中的值。我的意思是,假设有10个表,我想从第6个读取值,或者我有表id 或者说,我想读取某个td之后的td值 或在某些div、元素或文本之后的表。这些是可能的吗?你所问的一切都可以相对容易地完成。它的文档可能缺乏并不重要,它应该在使用和功能上类似于XML和网络的XmlDocument实现 如何读取特定表中的值?假设有10个表,我想从第6个表中读取值,或者我有表id 查找第6个表: // XPath var table6 = doc.

使用c#4.0和htmlagilitypack,我如何读取特定表中的值。我的意思是,假设有10个表,我想从第6个读取值,或者我有表id

或者说,我想读取某个td之后的td值


或在某些div、元素或文本之后的表。这些是可能的吗?

你所问的一切都可以相对容易地完成。它的文档可能缺乏并不重要,它应该在使用和功能上类似于XML和网络的
XmlDocument
实现

如何读取特定表中的值?假设有10个表,我想从第6个表中读取值,或者我有表id

查找第6个表:

// XPath
var table6 = doc.DocumentNode.SelectSingleNode("//table[6]");

// LINQ
var table6 = doc.DocumentNode.Descendants("table").Skip(5).FirstOrDefault();
按id查找表/元素:

var myTable = doc.GetElementById("myTable");

// XPath
var myTable = doc.DocumentNode.SelectSingleNode("//table[@id='myTable']");
var myTable = doc.DocumentNode.SelectSingleNode("//*[@id='myTable']");

// LINQ
var myTable = doc.DocumentNode
    .Descendants("table")
    .Where(table => table.Attributes.Contains("id"))
    .SingleOrDefault(table => table.Attributes["id"].Value == "myTable");
var myTable = doc.DocumentNode
    .Descendants()
    .Where(e => e.Attributes.Contains("id"))
    .SingleOrDefault(e => e.Attributes["id"].Value == "myTable");
var myTable = doc.DocumentNode
    .Descendants("table")
    .SingleOrDefault(table => table.GetAttributeValue("id", null) == "myTable");
var myTable = doc.DocumentNode
    .Descendants()
    .SingleOrDefault(e => e.GetAttributeValue("id", null) == "myTable");
假设我想读取特定td之后的td值

在某些div、元素或文本之后的表


你应该注意一些模式。

你在说什么?显示标记。解释你需要拿什么。你试过什么?这里有一个不错的开端:我读到了,尝试一下你提到的东西,如果你不能得到它,回来时会有更具体的情况。谢谢你的链接。例如,页面中可能有许多表。假设我想在某个关键字或div元素之后获取表。我该怎么做?阅读某些标记后的元素。删除库文档中的(不必要的)注释。停止编写文本,并将一些示例HTML粘贴到问题中。举一个例子,说明你有什么样的投入,你期望什么样的产出,这可能会有所帮助。没有它,这是不可能的。谢谢你的回答。有什么地方可以让我学习xpath吗。任何好的教程电子书或视频。谢谢。我不知道有任何教程网站。我只建议找到一个列出运算符、函数和语法的程序,并尝试编写程序来处理某些数据。而且做了很多。
// XPath
var certainTd = table6.SelectSingleNode("//td[2]");
var tdAfterCertainTd = certainTd.SelectSingleNode("following-sibling::td[1]");

// LINQ (not so easy)
var certainTd = table6.Descendants("td").Skip(1).FirstOrDefault();
var tdAfterCertainTd = certainTd.NextSibling;
while (tdAfterCertainTd != null)
{
    if (tdAfterCertainTd.Name == "td")
        break;
    tdAfterCertainTd = tdAfterCertainTd.NextSibling;
}
// XPath
var certainDiv = doc.DocumentNode.SelectSingleNode("//div[1]");
var tableAfterCertainDiv = certainDiv.SelectSingleNode("following-sibling::table[1]");

// LINQ (not so easy)
var certainDiv = doc.DocumentNode.Descendants("div").FirstOrDefault();
var tableAfterCertainDiv = certainDiv.NextSibling;
while (tableAfterCertainDiv != null)
{
    if (tableAfterCertainDiv.Name == "table")
        break;
    tableAfterCertainDiv = tableAfterCertainDiv.NextSibling;
}