HtmlAgilityPack-如何读取某些表格-c#4.0
使用c#4.0和htmlagilitypack,我如何读取特定表中的值。我的意思是,假设有10个表,我想从第6个读取值,或者我有表id 或者说,我想读取某个td之后的td值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.
或在某些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;
}