Select 单 table 行使用 HtmlAgilityPack 并迭代其链接
Select single table row using HtmlAgilityPack and iterate its links
我尝试迭代单个 table 行及其 href 链接,但它没有按预期工作,它没有找到选定的行及其链接,而是找到了 table 中的所有链接..我做错了什么?
var allRows = doc.DocumentNode.SelectNodes("//table[@id='sortingTable']/tr");
var i = 0;
var rowNumber = 0;
foreach (var row in allRows)
{
if (row.InnerText.Contains("Text in cell for which row I want to use"))
{
rowNumber = i+1;
break;
}
i += 1;
}
var list = new List<SortFile>();
var rowToRead = allRows[rowNumber]; // One specific row
var numberOfLinks = rowToRead.SelectNodes("//a[@href]"); // this does not find the 2 links in the table row but all links in the whole table?
foreach (HtmlNode link in rowToRead.SelectNodes("//a[@href]"))
{
//HtmlAttribute att = link.Attributes["href"];
//var text = link.OuterHtml;
}
您使用的 XPath (//a[@href]
) 将获取文档中的所有链接。 //
表示从文档根目录开始查找任何内容。
您应该使用.//a[@href]
从当前节点开始,select所有链接。这只会获取您 select 编辑的 tr
节点下的链接。
我尝试迭代单个 table 行及其 href 链接,但它没有按预期工作,它没有找到选定的行及其链接,而是找到了 table 中的所有链接..我做错了什么?
var allRows = doc.DocumentNode.SelectNodes("//table[@id='sortingTable']/tr");
var i = 0;
var rowNumber = 0;
foreach (var row in allRows)
{
if (row.InnerText.Contains("Text in cell for which row I want to use"))
{
rowNumber = i+1;
break;
}
i += 1;
}
var list = new List<SortFile>();
var rowToRead = allRows[rowNumber]; // One specific row
var numberOfLinks = rowToRead.SelectNodes("//a[@href]"); // this does not find the 2 links in the table row but all links in the whole table?
foreach (HtmlNode link in rowToRead.SelectNodes("//a[@href]"))
{
//HtmlAttribute att = link.Attributes["href"];
//var text = link.OuterHtml;
}
您使用的 XPath (//a[@href]
) 将获取文档中的所有链接。 //
表示从文档根目录开始查找任何内容。
您应该使用.//a[@href]
从当前节点开始,select所有链接。这只会获取您 select 编辑的 tr
节点下的链接。