HTMLAgilityPack - 寻找最内层 table
HTMLAgilityPack - Finding the innermost table
我不确定如何添加动态 Xpath 以使我们能够在 HTML 中找到最内层的表(作为 IEnumerable/List),无论它们处于什么级别
基本上如果我有:
<table>
<tr>
<td>
<table>
<tr>
<td>
<table><tr><td>thisguy</td></tr></table>
</td>
</tr>
<td>
<table><tr><td>thisguy</td></tr></table>
</td>
</tr>
</table>
</td>
</tr>
</table>
我正在尝试 return 包含此人的 td 表。当然这只是一个例子。真正的表格不包含这个。
我尝试了一个递归函数,但结果是:
private static IEnumerable<HtmlNode> GetBottomMostTable(HtmlNode nodeToCheck)
{
var isTableExist = nodeToCheck
.Descendants("table")
.Any();
if (isTableExist)
{
var bottomMost = GetBottomMostTable(nodeToCheck.ChildNodes.Descendants("table").First());
}else
{
return nodeToCheck
}
}
试试这个代码:
var innerTables = doc.DocumentNode.SelectNodes("//table[not(descendant::table)]");
那里使用的 XPath 将获得所有 table 个没有 table 作为后代的节点。
我不确定如何添加动态 Xpath 以使我们能够在 HTML 中找到最内层的表(作为 IEnumerable/List),无论它们处于什么级别
基本上如果我有:
<table>
<tr>
<td>
<table>
<tr>
<td>
<table><tr><td>thisguy</td></tr></table>
</td>
</tr>
<td>
<table><tr><td>thisguy</td></tr></table>
</td>
</tr>
</table>
</td>
</tr>
</table>
我正在尝试 return 包含此人的 td 表。当然这只是一个例子。真正的表格不包含这个。
我尝试了一个递归函数,但结果是:
private static IEnumerable<HtmlNode> GetBottomMostTable(HtmlNode nodeToCheck)
{
var isTableExist = nodeToCheck
.Descendants("table")
.Any();
if (isTableExist)
{
var bottomMost = GetBottomMostTable(nodeToCheck.ChildNodes.Descendants("table").First());
}else
{
return nodeToCheck
}
}
试试这个代码:
var innerTables = doc.DocumentNode.SelectNodes("//table[not(descendant::table)]");
那里使用的 XPath 将获得所有 table 个没有 table 作为后代的节点。