如何計算html文件中表中的行C#

c# html-agility-pack html-parsing linq

當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將是相同的,它只是自動用int替換var

2)我編輯了代碼,現在你和我有相同的結果

3)我從1開始計數,所以你有表#1,表#2,表#3和表#4。最後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選擇器查詢語法,大多數Web開發人員都非常熟悉它。在這種情況下,您可能可以使用body > table:nth-of-type(2) > tr ,它將返回所有tr的數組,然後只計算它們,或檢查結果數組的長度。或者, body > table ~ table > tr也可以從你給出的樣本中獲得, br + table > tr



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因