2017-04-26 73 views
1

Hi和在此先感謝。通過非封閉的標籤循環?

我試圖通過<td>標籤集合在一個表中使用HTMLAgilityPack在VB.NET循環。它們包含在<tr>標籤內(自然地)。

我已經創建了下面的循環來訪問TR的和TD的要求:

For Each tr In table.SelectNodes(".//tr") 
    For Each td In tr.SelectNodes("td") 
     '(Handle td's here) 
    Next 
Next 

的問題是,該網站的HTML缺少在他們的模板中的一個特定TD的結束標記。這將導致一個3運輸署在每一個循環,因爲它看到了第三個TD作爲一個無盡的標籤,包括所有其他被拾起。例如:

<tr> 
    <td>Div 1 info</td> 
    <td>Div 2 info</td> 
    <td>Div 3 info 
    <td>Div 4 info</td> 
    <td>Div 5 info</td> 
</tr> 

我的問題是我該如何解決這個循環通過TD的全集合?我試圖檢查是否TR.Count是3然後更新TR(2).InnerHTML插入標籤在適當情況下。它只是不更新​​。

我希望得到任何幫助,您可以提供!謝謝!

回答

1

設置HtmlDocument.OptionFixNestedTags屬性:

Dim html = New HtmlDocument 
html.OptionFixNestedTags = True 
html.LoadHtml(File.ReadAllText(htmlFile)) 
Dim table As HtmlNode = html.DocumentNode 
For Each tr In table.SelectNodes(".//tr") 
    For Each td In tr.SelectNodes("td") 
     Console.WriteLine(td.InnerText.Trim()) 
    Next 
Next