我有一些 html:
<h2>Results</h2>
<div class="box">
<table class="tFormat">
<th>Head</th>
<tr>1</tr>
</table>
</div>
<h2>Grades</h2>
<div class="box">
<table class="tFormat">
<th>Head</th>
<tr>1</tr>
</table>
</div>
我想知道如何获得“结果”下的表格
我试过:
var nodes = doc.DocumentNode.SelectNodes("//h2");
foreach (var o in nodes)
{
if (o.InnerText.Equals("Results"))
{
foreach (var c in o.SelectNodes("//table"))
{
Console.WriteLine(c.InnerText);
}
}
}
它有效,但它也得到了 Grades h2 下的表格
最佳答案
请注意,div 不在标题内分层,因此在那里查找它没有意义。
这对您有用 - 它会找到标题后的下一个元素:
if (o.InnerText.Equals("Results"))
{
var nextDiv = o.NextSibling;
while (nextDiv != null && nextDiv.NodeType != HtmlNodeType.Element)
nextDiv = nextDiv.NextSibling;
// nextDiv should be correct here.
}
您还可以编写更具体的 xpath 来查找该 div:
doc.DocumentNode.SelectNodes("//h2[text()='Results']/following-sibling::div[1]");
关于C# HtmlAgilityPack 从特定的 h2 中选择表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14040724/