나는 몇몇 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);
}
}
}
그것은 작동하지만 그것은 또한 학년 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]");
var nodes = doc.DocumentNode.SelectNodes("//h2");
if (nodes.FirstOrDefault()!=null)
{
var o=nodes.FirstOrDefault();
if (o.InnerText.Equals("Results"))
{
foreach (var c in o.SelectNodes("//table"))
{
Console.WriteLine(c.InnerText);
}
}
}