html 파일 내에 복합 테이블이있을 때 어떻게 부모 테이블의 행을 계산할 수 있습니다.
복합 표가 의미하는 바는 무엇입니까? 테이블의 일부 셀에 다른 테이블이 들어있는 테이블.
다음은 코딩에 대한 나의 시도입니다. 참고 잘못된 값이 나타납니다.
String htmlFile = "C:/Temp/Test_13.html";
HtmlDocument doc = new HtmlDocument();
doc.Load(htmlFile);
HtmlNodeCollection tables = doc.DocumentNode.SelectNodes("//table");
HtmlNodeCollection rows = tables[1].SelectNodes(".//tr");
Console.WriteLine(" Rows in second (Parent) table: " + rows.Count());
귀하의 답에 어떤 네임 스페이스가 사용되는지 표시하십시오.
대표적인 샘플 파일은 다음과 같습니다.
<html>
<body>
<table border="1">
<tr>
<td>Apps</td>
</tr>
<tr>
<td>Offcie Web Apps</td>
</tr>
</table>
<br/>
<table border="1">
<tr>
<td>Application</td>
<td>Status</td>
<td>Instances</td>
</tr>
<tr>
<td>PowerPoint</td>
<td>Online</td>
<td>
<table border="1">
<tr>
<td>Server1</td>
<td>Online</td>
</tr>
<tr>
<td>Server2</td>
<td>Disabled</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>Word</td>
<td>Online</td>
<td>
<table border="1">
<tr>
<td>Server1</td>
<td>Online</td>
</tr>
<tr>
<td>Server2</td>
<td>Disabled</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
고맙습니다.
내가 올바르게 이해한다면 이것은 당신이 원하는 것입니다.
int i = 1;
HtmlNodeCollection tables = doc.DocumentNode.SelectNodes("//table");
foreach (HtmlNode table in tables)
{
var tmp = table.ParentNode;
if (tmp.OriginalName.Contains("td"))
MessageBox.Show("The parent of table #" + i + " has" + tmp.ParentNode.ParentNode.Elements("tr").Count().ToString() + " rows.");
i++;
}
MessageBox가 2 번 나타납니다.
"The parent of table #3 has 3 rows."
"The parent of table #4 has 3 rows."
수정 (질문에 대한 답변) :
1) int i = 1
에서 카운터를 시작했습니다. var i = 1
은 똑같은 것이고, 자동적으로 var
를 int
대체합니다.
2) 코드 편집을 마치면 나에게도 같은 결과가 나타납니다.
3) 테이블 1, 테이블 2, 테이블 3, 테이블 4가 있으므로 1부터 계산을 시작했습니다. 귀하의 2 마지막 테이블 (테이블 # 3 및 # 4) 테이블 # 2의 하위 테이블, 테이블 # 2 3 행이 있습니다. 위의 코드는 일부 테이블의 하위 테이블 인 테이블 만 인쇄합니다. 당신이 원하는 것을 대답으로 보여줄 수 있습니까?
편집 2 :
int i = 1;
HtmlNodeCollection tables = doc.DocumentNode.SelectNodes("//table");
foreach (HtmlNode table in tables)
{
if (!table.ParentNode.OriginalName.Contains("td")) // If table is not sub-table
MessageBox.Show("Table #" + i + " have " + table.Elements("tr").Count().ToString() + " rows.");
i++;
}
MessageBox가 2 번 나타납니다.
"The parent of table #1 has 2 rows."
"The parent of table #2 has 3 rows."
csQuery nuget 패키지를 사용해 보는 것이 좋습니다. 그것은 그런 일을하는 것에서 대부분의 두통을 없애기 위해 고안되었습니다. CSS 선택기 쿼리 구문을 사용할 수 있습니다.이 구문은 대부분의 웹 개발자가 잘 알고 있습니다. 이 경우 body > table:nth-of-type(2) > tr
빠져 나와서 모든 tr의 배열을 반환 한 다음 계산하거나 결과 배열의 길이를 확인할 수 있습니다. 또는 body > table ~ table > tr
은 br + table > tr
과 같이 제공 한 샘플에서도 사용할 수 있습니다.