2017-04-26 1 views
1

Bonjour et merci d'avance. J'essaie d'utiliser HTMLAgilityPack dans VB.NET pour parcourir une collection de balises <td> dans un tableau. Ils sont contenus à l'intérieur des étiquettes <tr> (naturellement).En boucle à travers des étiquettes non fermées?

J'ai créé la boucle ci-dessous pour accéder au besoin de ce TR et TD:

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

Le problème est que le code HTML du site manque une balise de fin sur un TD particulier dans leur modèle. Cela provoque un 3 TD à prendre dans chaque boucle car il voit le 3ème TD comme une étiquette sans fin englobant tous les autres. Par exemple:

<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> 

Ma question est de savoir comment puis-je résoudre ce problème en boucle à travers la collection complète de TD? J'ai essayé de vérifier si TR.Count est 3 puis mettre à jour tr (2) .InnerHTML en insérant une étiquette le cas échéant. Cela ne se met tout simplement pas à jour.

J'apprécierais toute aide que vous pouvez fournir! Merci!

Répondre

1

Définissez la propriété 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